En realidad, nos encontramos con el mismo problema. Terminamos implementando un método de extensión con parámetros sobrecargados, que toma un booleano que indica si queremos o no que el control esté deshabilitado. Simplemente agregamos el atributo "deshabilitado" cuando es apropiado, y dejamos que el HtmlHelper incorporado maneje el trabajo pesado.
clase Extensión y método:
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Web.Mvc;
using System.Web.Mvc.Html;
using System.Web.Routing;
public static class OurHtmlHelpers
{
public const string DisabledAttribute = "disabled";
public static MvcHtmlString TextBoxFor<TModel, TProp>(this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProp>> expression,
object htmlAttributes,
bool canEdit)
{
var htmlAttributeDictionary = SetDisabledAttribute(htmlAttributes, canEdit);
return htmlHelper.TextBoxFor(expression, htmlAttributeDictionary);
}
private static RouteValueDictionary SetDisabledAttribute(object htmlAttributes, bool canEdit)
{
var htmlAttributeDictionary = new RouteValueDictionary(htmlAttributes);
if (!canEdit)
{
htmlAttributeDictionary.Add(DisabledAttribute, DisabledAttribute);
}
return htmlAttributeDictionary;
}
}
A continuación, sólo tiene que hacer referencia a su nueva clase y llamar @Html.TextBoxFor(m => m.SomeValue, new { @class = "someClass" }, <Your bool value>)
Vale la pena señalar que habría que definir estas extensiones para cualquiera de las sobrecargas TextBoxFor te gustaría usar, pero parece una compensación razonable. También puede utilizar la mayoría del mismo código para otros HtmlHelpers a los que le gustaría agregar la funcionalidad.
¡funciona, te debo una cerveza! Gracias – Tony
Lo esperaré xD –
que es bastante descarado:> pero me gusta. Sin embargo, estoy agregando una variante (más frágil) de mi propia – goofballLogic