2019年禁用Chrome自动填充的真正解决方案

3
我知道这个问题有很多答案。我已经查看了所有禁用谷歌自动完成(建议下拉菜单)的解决方案,比如使用autocomplete=0ff或autocomplete=false,但是没有解决问题。我创建了一个MVC应用程序,其中包含带有下拉列表和HTML EditorFor的视图。
一种解决方法是向HTML编辑器添加名称,可以帮助删除自动完成,但是由于我更改了HTML EditorFor的名称,所以出现了提交值的问题。
<div class="col-md-10">
     @Html.EditorFor(model => model.Address, new {htmlAttributes = new { @class = "form-control", @id = "show_address", Name = Guid.NewGuid().ToString(), autocomplete = "noped" } })
</div>

有人有2019年禁用Google自动完成的解决方案吗?

更新:

我尝试使用下面第一个解决方案中提供的html.textboxfor,但我已经意识到,只有在视图中有一个其他的textboxfor时,autocomplete=off才起作用。如果在同一视图中有多个textboxfor,则对任何Html Textboxfor使用autocomplete=off都无法禁用自动完成!请有人帮忙吗?

5个回答

2
我认为我已经找到了答案。我要感谢@Mangesh Ati提供的解决方案。我想为其他有兴趣的人总结一下解决方案。
autocomplete=off 可以禁用google自动建议在所有@htmlTextBoxFor上,但是对于名为address的模型部分,则需要使用autocomplete=randomn_string。
重要提示: 如果您在textboxfor上使用jquery自动完成,那么在.focus中添加autocomplete=randomn_string属性非常重要:
 $('#show_address').autocomplete({

            }).focus(function () {
                 $(this).attr('autocomplete', 'some_random_value');

            });

1
谢谢!感谢您的信任。最终,您找到了解决方案。 - Mangesh Auti
对我来说,在 TextBoxFor 层面上,autocomplete = "random" 可以正常工作。如果你想在 FORM 层面上应用它,那么可以使用 autocomplete = "off"。在 Chrome 79 中测试过。 - Romias
你的解决方案部分正确,因为第一个输入字段仍然显示建议...有什么想法吗?我甚至删除了焦点属性或尝试在表单标记上直接指定随机自动完成值,但没有变化 :/ - Axel Samyn
实际上,我将输入标签的“name”属性设置为“Name”,这导致建议被显示出来。将名称更改为类似“ClientName”的内容解决了这个问题... - Axel Samyn
实际上,更改名称属性只会更改浏览器缓存中保存建议的“键”...这意味着一旦更改了名称,建议将再次开始出现。 - Axel Samyn

2

EditorFor有一些缺点,它在某些情况下无法工作,使用TextBoxFor而不是EditorFor是更好的方法。此外,它不会影响Postback值。(更多细节请在这里查看)

最初的回答:EditorFor并非完美,有时无法正常工作,建议使用TextBoxFor代替。另外,它不会影响Postback值。(详情请参考此处)
@Html.TextBoxFor(model => model.Address, new { @class = "form-control",  @id = "show_address", autocomplete = "off" })

更新:请查看我更新后的演示DEMO
即使添加了autocomplete=off,仍然有一些浏览器会忽略它们并尝试显示一些提示或自动填充。更多信息,请查看此处
在autocomplete中添加一些随机值,以便浏览器将其视为关闭状态。

@Html.TextBoxFor(model => model.Address1, new { @class = "form-control",  @id = "show_address", autocomplete = "some_random_value" })

1

你有尝试过吗?

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

它会生成接近以下内容的标记语言:
<input type="text" id="date" name="date" class="aDatePicker" autocomplete="off" />

还可以尝试以下操作:

//Disable autocomplete throughout the site
$(document).ready(function() {
    $("input:text,form").attr("autocomplete","off");
})

谢谢!上面的代码是有效的,但是当我对多个textboxfor使用上述第一个解决方案时,任何一个textboxfor中都没有禁用自动完成!你知道为什么吗? - Jane Cohen
检查渲染代码,看看工作和不工作的渲染代码之间有什么区别! - SmartestVEGA
我尝试通过检查元素的呈现方式来检查差异,但是开发者工具显示输入为autocomplete = off,即使该输入的Google自动完成未被禁用。您能否建议我如何进一步检查或提供任何解决方案..?谢谢! - Jane Cohen

1
在VB中,这对我有用(使用C#转换器):
@Html.EditorFor(Function(m) m.Password, New With {.class = "form-control text-center", .autocomplete = "new-password"})

0
<input type="any" readonly onfocus="this.removeAttribute('readonly');">

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接