我正在创建一个 Html 帮助程序扩展来呈现自定义文件上传控件。为了使某些客户端功能正常工作,我需要在使用我的助手时显示此脚本。
function CheckSize(fileSize,id)
{
var fileElement = document.getElementById(id);
if (fileElement .files !== undefined) {
var megaBytes = (fileInputs[0].files[0].size / 1024) / 1024;
if (megaBytes > fileSize) {
//Do Something
}
}
为确保此脚本存在,我必须将其插入到 Html 帮助器中,如下所示。
public static class UploadControlExtensions
{
public static string UploadControl(this HtmlHelper helper,
UploadControlSettings settings)
{
string script = GetScript();
string html = string.format("<input id='{0}'
onchange='CheckSize({0},{1})'",settings.Id,setting.MaxSize);
return script + html;
}
}
如果页面上只有我的控件的一个实例,这很好,但如果有多个实例,则同一脚本会多次插入到页面中。
是否有一种优雅的方式来确保只插入我的脚本的一个版本?我知道我可以将它单独添加到我的项目中,但我宁愿我的 HtmlHelper 扩展类为您处理所有这些。
最佳答案
您可以将状态存储在 ViewData
中,例如:
public static class UploadControlExtensions
{
public static string UploadControl(this HtmlHelper helper, UploadControlSettings settings)
{
var viewData = helper.ViewContext.Controller.ViewData;
string script = String.Empty;
if (!viewData.ContainsKey("UploadScriptPresent"))
{
script = GetScript();
viewData.Add("UploadScriptPresent", true);
}
string html = string.format("<input id='{0}' onchange='CheckSize({0},{1})'", settings.Id, setting.MaxSize);
return script + html;
}
}
关于javascript - 在 MVC 中创建自定义 Html 帮助程序扩展时如何避免重复的脚本标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24369130/