我有我的login.cshtml页面,其中密码文本框显示了自动完成选项,我需要禁用此选项。下面是我的代码。
<div id="login">
@using (Html.BeginForm(MVC.Account.Login())) {
<div>@Html.ValidationSummary(true)</div>
<div>@Html.LabelledTextBoxFor(m => m.Username)</div>
<div>@Html.LabelledPasswordFor(m => m.Password)</div>
}
</div>
如何禁用在IE和Chrome浏览器中都可以使用的自动完成选项?
如果我在下面的代码中使用该代码,那么我将收到错误消息,即“无重载方法LabelledPasswordFor
带有2个参数”。
@Html.LabelledPasswordFor(m => m.Password, new { autocomplete = "off" })
public static MvcHtmlString LabelledPasswordFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression)
{
var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
var displayName = html.RawDisplayNameFor(expression);
var editor = html.PasswordFor(expression, metadata.IsRequired ? (object)new { placeholder = displayName, @class = "requiredInput" } : new { placeholder = displayName });
var validator = html.ValidationMessageFor(expression);
return new MvcHtmlString(editor.ToHtmlString() + validator.ToHtmlString());
}
答案 0 :(得分:1)
由于LabelledPasswordFor
是您自己的实现,因此您应该可以对其进行更改以也支持autocomplete
。下面是一个示例。
我选择使用true/false
来调用它,然后将其翻译为"on" / "new-password"
,这样,属性的确切细节就不再与调用者有关。
public static MvcHtmlString LabelledPasswordFor<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression,
bool autocomplete = true)
{
var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
var displayName = html.RawDisplayNameFor(expression);
var htmlAttr = new Dictionary<string, object>();
htmlAttr.Add("placeholder", displayName);
htmlAttr.Add("autocomplete", autocomplete ? "on" : "new-password");
htmlAttr.Add("class", metadata.IsRequired ? "requiredInput" : "");
var editor = html.PasswordFor(expression, htmlAttr);
var validator = html.ValidationMessageFor(expression);
return new MvcHtmlString(editor.ToHtmlString() + validator.ToHtmlString());
}
用法:
<div>@Html.LabelledPasswordFor(m => m.Password, autocomplete: false)</div>
答案 1 :(得分:0)
将HTML的输入元素自动完成属性设置为“关”值应防止自动完成:
@Html.LabelledPasswordFor(m => m.Password, new { autocomplete = "off" })
顺便说一句,您可以使用
禁用整个表单的自动填充功能(表单内的所有输入都会受到影响)Html.BeginForm(action, controller, FormMethod.Post, new { autocomplete="off"})