html - recordar - ¿Cómo deshabilitar la función de autocompletar del campo de entrada con EditorFor?
evitar recordar contraseña html (2)
<%= Html.EditorFor(product => product.Name) %>
Necesito que la salida generada tenga el conjunto de atributos autocompletar = "apagado".
¿Qué me estoy perdiendo?
Editar: estoy buscando un método de extensión para Editor. Para el que acepta el diccionario de clave / valor para atributos, así puedo llamarlo así: <%= Html.EditorFor(product => product.Name, new { autocomplete = "off" } ) %>
Aquí está hecho para LabelFor, pero es necesario ajustarlo para EditorFor
public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, object htmlAttributes) {
return LabelFor(html, expression, new RouteValueDictionary(htmlAttributes));
}
public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, IDictionary<string, object> htmlAttributes)
{
ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
string htmlFieldName = ExpressionHelper.GetExpressionText(expression);
string labelText = metadata.DisplayName ?? metadata.PropertyName ?? htmlFieldName.Split(''.'').Last();
if (String.IsNullOrEmpty(labelText))
{
return MvcHtmlString.Empty;
}
TagBuilder tag = new TagBuilder("label");
tag.MergeAttributes(htmlAttributes);
tag.Attributes.Add("for", html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName));
tag.SetInnerText(labelText);
return MvcHtmlString.Create(tag.ToString(TagRenderMode.Normal));
}
Edit2: me di cuenta de que no se puede llamar EditorFor porque ya existe un Editor reemplazado para el que acepta un tipo anónimo, consulte aquí http://msdn.microsoft.com/en-us/library/ff406462.aspx .. de todos modos, puede nombrarlo de manera diferente, no grandes.
Tendrá que usar una plantilla personalizada que genere el elemento de entrada con el atributo o puede agregar algo de javascript a la página para agregar el atributo del lado del cliente.
<%= Html.EditorFor( product => product.Name, "NoAutocompleteTextBox" ) %>
Luego, en Shared / EditorTemplates necesitas un NoAutocompleteTextBox.ascx que defina
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%= Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue,
new { autocomplete = "off" }) %>
o, la manera jQuery, para configurarlo en todas las entradas de texto
$(function() {
$(''input[type=text]'').attr(''autocomplete'',''off'');
});
public static MvcHtmlString EditorForAttr<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, object htmlAttributes) {
return EditorForAttr(html, expression, new RouteValueDictionary(htmlAttributes));
}
public static MvcHtmlString EditorForAttr<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, IDictionary<string, object> htmlAttributes) {
ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
string htmlFieldName = ExpressionHelper.GetExpressionText(expression);
TagBuilder tag = new TagBuilder("input");
tag.GenerateId(html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName));
tag.MergeAttribute("name", htmlFieldName);
tag.MergeAttribute("type", "text");
tag.MergeAttribute("value", metadata.Model == null ? "" : metadata.Model.ToString()); // Not sure if this is correct.
tag.MergeAttributes(htmlAttributes, true);
return MvcHtmlString.Create(tag.ToString(TagRenderMode.SelfClosing));
}