Отключить автозаполнение в текстовом поле html helper в MVC - PullRequest
8 голосов
/ 11 марта 2011

Хорошо,

Я бы в обычном asp.net использовал тему, чтобы отключить автозаполнение во всех текстовых полях на всем сайте.Однако я не могу сделать это на MVC, потому что ничто в файлах темы .skin, кажется, не работает.

У меня есть это в моем файле .skin:

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

однако это не рендерит вообщеКонечно, потому что это не так, как работает MVC.Во всяком случае, есть ли способ, которым я могу заставить такого рода вещи работать.Сайт, на котором я пытаюсь это сделать, слишком велик, чтобы оправдать изменение каждого текстового поля или создание нового помощника HTML для решения проблемы?

У кого-нибудь есть идеи?

Ответы [ 5 ]

25 голосов
/ 11 марта 2011

MVC не имеет серверных элементов управления, как обычный старый ASP.NET. Поэтому обработка вашего сервера не выполняется. Они передаются клиенту именно так, как вы их печатаете. Темы - это не то, что вы будете использовать в MVC, потому что они применяются к серверным элементам управления ASP.NET, и вы не будете использовать их здесь. Тем не менее, HTML-помощники действительно обрабатываются сервером при отображении представления. Вам нужно будет добавить autocomplete = "off" к фактическому элементу управления HTML, используя перегрузку свойств html.

@Html.TextBoxFor(x => x.Something, new { autocomplete="off" } )

Или каким-либо фактическим атрибутом HTML, отображаемым при установке autocomplete = "off" в серверном элементе управления asp.net.

РЕДАКТИРОВАТЬ: Один из вариантов, влияющих на все текстовые поля, будет создать свой собственный вспомогательный метод 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)
12 голосов
/ 14 марта 2011

Приветствую вас за ответы, ребята, однако эти решения действительно потребовали бы от меня редактирования всех форм на сайте, если бы вы увидели использование 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 отключен, пользователи не смогут использовать половину сайта.

9 голосов
/ 11 марта 2011

AFAIK, вы не можете сделать autocomplete = off с css, и это должен быть атрибут html, и, следовательно, вы ничего не можете поделать со всеми текстовыми полями.Одна вещь, которую вы можете сделать, это добавить атрибут в форму следующим образом (он будет адресован всем текстовым полям в текущей форме)

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

или создать собственный метод расширения Helper, аналогичный BeginForm, который добавляетэтот атрибут html внутри.

1 голос
/ 27 июля 2016

Просто добавьте это в конец документа _Layout.cshtml

<script>
    $("input[type='text']").attr("autocomplete","off");
</script>
0 голосов
/ 27 мая 2015
@Html.TextBox("Address","",new { @class = "classname", autocomplete = "off" })
...