【问题标题】:Disable autocomplete on html helper textbox in MVC在 MVC 中禁用 html 帮助器文本框的自动完成
【发布时间】:2011-03-11 14:50:41
【问题描述】:

好的,

我会在正常的 asp.net 中使用主题来关闭整个站点上所有文本框的自动完成功能。但是我不能在 MVC 上执行此操作,因为主题 .skin 文件中的任何内容似乎都不起作用。

我的 .skin 文件中有这个:

<asp:TextBox runat="server" autocomplete="off" />

然而这根本不渲染,当然因为这不是 MVC 的工作方式。无论如何,我有什么办法可以让这种事情发挥作用。 我尝试在其上执行此操作的站点太大,无法保证更改每个文本框或创建新的 HTML 帮助程序来解决问题?

有人有什么想法吗?

【问题讨论】:

    标签: c# asp.net-mvc skin


    【解决方案1】:

    为答案干杯,但是这些解决方案确实需要我编辑站点中的所有表单,如果您看到我们正在使用的 MVC,您就会理解。

    无论如何我选择了这种方式,在母版页中我添加了这个脚本:

    <script language="javascript" type="text/javascript">
            $(document).ready(function () {
                try {
                    $("input[type='text']").each(function(){
                                   $(this).attr("autocomplete","off");
                                });
                }
                catch (e)
                { }
            });
    
        </script>
    

    我知道如果 javascript 被禁用,这是毫无价值的,但老实说,如果 javascript 被禁用,用户将无法使用一半的网站。

    【讨论】:

    • 无论如何,“如果 javascript 被关闭”的论点现在已经站不住脚了。仍然在禁用 javascript 的情况下浏览网页的用户是极少数。我敢打赌,无论如何,他们已经习惯了启用 javascript,否则它们在 21 世纪的互联网上如何运作?
    【解决方案2】:

    不要写任何东西@autocomplete='write-anything-instead-of-off'

    @Html.TextBoxFor(model => model.FirstName, new { placeholder = "First Name", @class = "form-control", @id = "txtFirstName", @autocomplete = "new-FirstName"})
    

    【讨论】:

      【解决方案3】:

      MVC 没有像普通的旧 ASP.NET 那样的服务器控件。因此,不会对您的控件进行任何服务器处理。它们以您键入它们的方式呈现给客户端。主题不是您将在 MVC 中使用的东西,因为它们适用于 ASP.NET 服务器控件并且您不会在这里使用它们。也就是说,在呈现视图时,服务器会处理 HTML 助手。您需要使用 html 属性重载将 autocomplete="off" 添加到实际的 HTML 控件中。

      @Html.TextBoxFor(x => x.Something, new { autocomplete="off" } )
      

      或者当您在 asp.net 服务器控件中设置 autocomplete="off" 时呈现的实际 HTML 属性。

      编辑: 影响所有文本框的一种选择是创建您自己的 Html 辅助方法。只需像这样创建一个扩展方法:

      using System.Web.Mvc;
      using System.Web.Mvc.Html;
      
      public static MvcHtmlString NoAutoCompleteTextBoxFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression)
      {
          return html.TextBoxFor(expression, new { autocomplete="off" });
      }
      

      那么你可以这样做:

      Html.NoAutoCompleteTextBoxFor(x => x.Something)
      

      【讨论】:

        【解决方案4】:

        使用自动完成=“禁用自动完成”

        不再支持 autocomplete="off"。

        【讨论】:

          【解决方案5】:

          AFAIK,你不能用 css 做autocomplete = off,它必须是一个 html 属性,因此你不能影响所有的文本框。您可以做的一件事是像这样将属性添加到表单中(它将处理当前表单中的所有文本框)

          Html.BeginForm(action,controller, FormMethod.Post, new { autocomplete="off"})
          

          或创建一个类似于BeginForm 的自定义 Helper 扩展方法,在内部添加此 html 属性。

          【讨论】:

            【解决方案6】:

            只需将此添加到 _Layout.cshtml 文档末尾

            <script>
                $("input[type='text']").attr("autocomplete","off");
            </script>
            

            【讨论】:

              【解决方案7】:
              @Html.TextBox("Address","",new { @class = "classname", autocomplete = "off" })
              

              【讨论】:

                【解决方案8】:

                ASP.net MVC HTML 属性:具有 type="text" 由 JQUERY 代码管理

                @Html.TextBoxFor(model => model.FirstName, new {@id = "txtFirstName"})
                
                
                <script language="javascript" type="text/javascript">
                        $(document).ready(function () {
                            try {
                                $("input[type='text']").each(function () {
                                    $(this).attr("autocomplete", "off-1");
                                });
                            }
                            catch (e) { }
                        });
                    
                    </script>
                

                【讨论】:

                • 目前,我在我的项目中使用它对我有用
                • 请始终添加简短说明
                【解决方案9】:

                使用下面的 jQuery 代码

                 $(document).ready(function() {
                    $("form,input").attr("autocomplete","off");
                 });
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2013-11-29
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-05-07
                  • 2016-01-05
                  • 2019-03-25
                  • 1970-01-01
                  相关资源
                  最近更新 更多