【问题标题】:How to disable autocomplete in MVC Html Helper如何在 MVC Html Helper 中禁用自动完成
【发布时间】:2010-06-10 15:22:36
【问题描述】:

我有一个典型的 ADO.NET EF 驱动表单,它允许用户输入日期。我在上面放了一个 jQuery 日期选择器,但是当用户去选择一个日期时,浏览器会在下拉列表中显示一些其他条目。如何关闭该下拉菜单?在传统的 ASP.NET 中,我会设置 autocomplete="off"。不确定 MVC 等效项。

<div class="editor-field">
    <%= Html.TextBoxFor(model => model.date, new { @class = "aDatePicker" })%>
    <%= Html.ValidationMessageFor(model => model.date) %>
</div> 

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    试试这个:

    <%= Html.TextBoxFor(
        model => model.date, 
        new { @class = "aDatePicker", autocomplete = "off" }
    )%>
    

    它将生成接近以下内容的标记:

    <input type="text" id="date" name="date" class="aDatePicker" autocomplete="off" />
    

    【讨论】:

      【解决方案2】:

      几个点

      1. 如果您或多或少已经编写了网站,并且不想返回并修改所有 cshtml 以禁用自动完成功能(我们将不得不返回并更改整个网站的数百行代码) ,您可以通过 Javascript 使用准备好的处理程序禁用它,如下所示:

        //Disable autocomplete throughout the site
        $(document).ready(function() {
            $("input:text,form").attr("autocomplete","off");
        })
        
      2. 根据我的阅读,您需要在表单和文本框级别禁用它,以便它在所有版本的 Firefox 和 IE 上工作。

      【讨论】:

        【解决方案3】:

        上面我用了达林的,并成功应用到了一个demo中:

            @model RequestAQuote.Models.RequestAQuoteModel
            @{
                ViewBag.Title = "Request a Free Quote";
                List<string> ProjectTypes = new List<string>();
                ProjectTypes.Add("Electrical Wiring");
                ProjectTypes.Add("Install Breakers");
                ProjectTypes.Add("Ceiling Fan");
                ProjectTypes.Add("Replace Light");
                ProjectTypes.Add("Replace Outlet");    
            }
        
            <h2>Request A Quote</h2>
            @using (Html.BeginForm())
            {
                @Html.ValidationSummary()
                <fieldset>
                    <legend>Request a Quote Form</legend>
                    <ol>
                        <li>
                            @Html.LabelFor(m => m.ProjectType)
                            @Html.DropDownListFor(m => m.ProjectType, new MultiSelectList(ProjectTypes))
                        </li>
                        <li>
                            @Html.LabelFor(m => m.ContactName)
                            @Html.EditorFor(m => m.ContactName, new { autocomplete = "off" })
                        </li>
                        <li>
                            @Html.LabelFor(m => m.DaTimePhone)
                            @Html.EditorFor(m => m.DaTimePhone, new { autocomplete = "off" })
                        </li>
                        <li>
                            @Html.LabelFor(m => m.Email)
                            @Html.EditorFor(m => m.Email, new { autocomplete = "off" })
                        </li>
                        <li>
                            @Html.LabelFor(m => m.ProjectDescription)
                            @Html.EditorFor(m => m.ProjectDescription, new { autocomplete = "off" })
                        </li>
                    </ol>
                    <input type="submit" value="Request Quote" />
                </fieldset>
            }
        
            @section scripts 
            {
                @Scripts.Render("~/bundles/jqueryval")
            }
        
            }
        

        【讨论】:

          【解决方案4】:

          使用自动完成=“关闭”

          Html.BeginForm("ValidateLogin", "Login", FormMethod.Post, htmlAttributes: new { id = "submitForm", autocomplete = "off" })
          

          【讨论】:

          • 这可行,但也会禁用该表单括号内每个字段的自动完成功能。
          【解决方案5】:

          我对此感到沮丧已经有一段时间了。记住登录字段存在安全风险。特别是当用户离开屏幕时。

          我的解决办法是

          1. 将登录按钮标记为禁用。

          2. 在 javascript/jquery 就绪方法中,我放置了一个 500 毫秒的 setTimeout 函数 a - 清除密码文本框,例如$('#Password').val('') b - 启用登录按钮 loginFtns = 函数(){ 变种 []; 这是包含方法的命名空间函数 that.clearPassword = function() { $('#Password').val(''); $('#LoginBtn').prop('disabled', false); }; that.init = 函数(){ that.initEvents(); setTimeout(function() { that.clearPassword(); }, 500); }; 归还; }();

             $().ready(function() {
                    loginFtns.init();
                });
            

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-01-13
            • 2016-09-17
            • 1970-01-01
            • 2018-03-20
            • 2020-10-18
            • 2014-08-07
            相关资源
            最近更新 更多