如何在MVC Html Helper中禁用自动完成功能

时间:2010-06-10 15:22:37

标签: asp.net-mvc

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

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

5 个答案:

答案 0 :(得分:78)

试试这个:

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

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

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

答案 1 :(得分:17)

几点意见

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

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

答案 2 :(得分:0)

我使用了上面的Darin并将其成功应用于演示:

    @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")
    }

    }

答案 3 :(得分:0)

使用自动填充=“关闭”

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

答案 4 :(得分:0)

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

我的解决方案是

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

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

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