Отключить автозаполнение в MVC для IE и Chrome - PullRequest
0 голосов
/ 29 октября 2018

У меня есть страница 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 с двумя аргументами».

@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());
    }

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Поскольку 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>
0 голосов
/ 29 октября 2018

Установка элемента ввода HTML autocomplete Атрибут в значение "off" должно предотвращать автозаполнение:

@Html.LabelledPasswordFor(m => m.Password, new { autocomplete = "off" })

Кстати, вы можете отключить функцию автозаполнения для всей формы (все входы внутри формы будут затронуты), используя

Html.BeginForm(action, controller, FormMethod.Post, new { autocomplete="off"})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...