11

好的,

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

我的 .skin 文件中有这个:

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

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

有人有什么想法吗?

4

9 回答 9

27

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)
于 2011-03-11T15:04:04.853 回答
14

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

于 2011-03-14T11:17:35.560 回答
10

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

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

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

于 2011-03-11T15:02:26.587 回答
1

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

@Html.TextBoxFor(model => model.FirstName, new { placeholder = "First Name", @class = "form-control", @id = "txtFirstName", @autocomplete = "new-FirstName"})
于 2020-07-01T16:13:03.043 回答
1

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

不再支持 autocomplete="off"。

于 2020-03-24T01:06:09.723 回答
1

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

<script>
    $("input[type='text']").attr("autocomplete","off");
</script>
于 2016-07-26T22:00:29.230 回答
0
@Html.TextBox("Address","",new { @class = "classname", autocomplete = "off" })
于 2015-05-27T04:41:41.550 回答
0

使用以下 jQuery 代码

 $(document).ready(function() {
    $("form,input").attr("autocomplete","off");
 });
于 2020-07-29T16:52:37.723 回答
0

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

@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>
于 2020-07-01T16:17:32.150 回答