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

时间:2011-03-11 14:50:42

标签: c# asp.net-mvc skin

确定,

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

我的.skin文件中有这个:

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

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

有人有任何想法吗?

9 个答案:

答案 0 :(得分:24)

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)

答案 1 :(得分:12)

为答案人干杯,但是那些解决方案真的需要我编辑网站中的所有表格,如果你看到我们正在使用的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被禁用,用户将无法使用一半的网站。

答案 2 :(得分:9)

AFAIK,您不能使用css autocomplete = off并且它必须是html属性,因此没有任何东西可以影响所有文本框。您可以做的一件事是将属性添加到表单中(它将解决当前表单中的所有文本框)

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

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

答案 3 :(得分:1)

只需将其添加到_Layout.cshtml文档结尾

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

答案 4 :(得分:1)

使用autocomplete =“ disable-autocomplete”

不再支持自动完成=“关闭”。

答案 5 :(得分:0)

@Html.TextBox("Address","",new { @class = "classname", autocomplete = "off" })

答案 6 :(得分:0)

不是注销任何东西,而是@ autocomplete ='write-anything-instead-of-off'

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

答案 7 :(得分:0)

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>

答案 8 :(得分:0)

使用以下jQuery代码

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