javascript - 在 MVC 中创建自定义 Html 帮助程序扩展时如何避免重复的脚本标记

标签 javascript asp.net-mvc html-helper

我正在创建一个 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/

相关文章:

javascript - 从 Vue.js 中的 JSON 文件导入数据而不是手动数据

javascript - 阻止 iPhone 降低视频质量 &lt;input type =“file” >

c# - 用于动态小数位数的 MVC ValidationMessage

c# - 为什么我的 Azure 中托管的 ASP NET Web 服务没有执行任何操作?

asp.net-mvc - 我应该使用 Html.Label 助手吗?

javascript - 我如何使用 .click on an <option>

javascript - Discord.js react 后编辑消息

asp.net-mvc - ASP MVC 3 使用AJAX和JQUERY提交url参数

asp.net-mvc - 如果在 for 循环中,DropDownListFor 不会选择值

javascript - 如何使用 MVC TextBox 助手显示名称和 POST 值?