在MVC中禁用html帮助文本框上的自动完成功能

Gil*_*rth 8 c# asp.net-mvc skin

好,

我会在普通的asp.net中使用一个主题来关闭整个网站上所有文本框的自动完成功能.但是我无法在MVC上执行此操作,因为主题.skin文件中的任何内容似乎都无效.

我在.skin文件中有这个:

<asp:TextBox runat="server" autocomplete="off" />
Run Code Online (Sandbox Code Playgroud)

但是这根本不会呈现,当然因为这不是MVC的工作方式.无论如何,我有什么方法可以让这种事情发挥作用.我试图这样做的网站太大,无法保证更改每个文本框或创建新的HTML帮助程序来解决问题?

有人有任何想法吗?

Che*_*hev 25

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

@Html.TextBoxFor(x => x.Something, new { autocomplete="off" } )
Run Code Online (Sandbox Code Playgroud)

或者在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" });
}
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

Html.NoAutoCompleteTextBoxFor(x => x.Something)
Run Code Online (Sandbox Code Playgroud)


Gil*_*rth 12

为答案人干杯,不过那些解决方案真的需要我编辑网站上的所有表格,如果你看到我们正在使用的MVC,你会明白的.

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

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

    </script>
Run Code Online (Sandbox Code Playgroud)

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


Bal*_*a R 10

AFAIK,你不能autocomplete = off用css,它必须是一个html属性,因此没有什么可以影响所有文本框.您可以做的一件事是将属性添加到表单中(它将解决当前表单中的所有文本框)

Html.BeginForm(action,controller, FormMethod.Post, new { autocomplete="off"})
Run Code Online (Sandbox Code Playgroud)

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