Quiero sobrescribir Html.TextBoxFor() con mi propia ayuda que tiene exactamente la misma firma (pero un espacio de nombre diferente, por supuesto): ¿es posible? Y, de ser así, ¿cómo?ASPNET MVC - ¿Anular Html.TextBoxFor (model.property) con un nuevo ayudante con la misma firma?
La razón de esto es que tengo más de 100 vistas en una aplicación ya existente, y quiero cambiar el comportamiento de TextBoxFor para que emita un atributo maxLength = n si la propiedad tiene un [StringLength (n)] anotación.
El código para la salida automática de maxlength = n está en esta pregunta: maxlength attribute of a text box from the DataAnnotations StringLength in Asp.Net MVC. Pero mi pregunta no es un duplicado: estoy intentando crear una solución más genérica: donde el DataAnnotaion fluye automáticamente al html sin necesidad de código adicional por parte de la persona que escribe la vista.
En la pregunta a la que se hace referencia, debe cambiar cada Html.TexBoxFor a Html.CustomTextBoxFor. Necesito hacerlo para que los TextBoxFor() 's existentes no necesiten cambiarse, por lo tanto, crear un helper con la misma firma: cambiar el comportamiento del método de ayuda, y todas las instancias existentes simplemente funcionarán sin ningún cambio (100 + vistas, al menos 500 TextBoxFor() s - no desea editar manualmente eso).
yo probamos este código: (Y tengo que repetirlo para cada una sobrecarga de TextBoxFor, pero una vez que la raíz del problema se resuelve, que va a ser trivial)
namespace My.Helpers
{
public static class CustomTextBoxHelper
{
public static MvcHtmlString TextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes, bool includeLengthIfAnnotated)
{
// implementation here
}
}
}
Pero estoy recibiendo un error de compilación en la vista en Html.TextBoxFor(): "La llamada es ambigua entre los siguientes métodos o propiedades" (por supuesto). ¿Hay alguna manera de hacer esto?
¿Existe un enfoque alternativo que me permita cambiar el comportamiento de Html.TextBoxFor, de modo que no sea necesario cambiar las vistas que ya lo usan?
La función Buscar y reemplazar de Visual Studio es bastante potente. ¡Podría reemplazar todas las ocurrencias en su Solución de 'Html.TextBoxFor' con' Html.CustomTextBoxFor' en un solo clic! No debería necesitar editar manualmente ningún archivo para cambiar el nombre de un método. – CoderDennis