Po prostu wpadliśmy na ten sam problem. W końcu wdrożyliśmy metodę rozszerzenia z przeciążonymi parametrami, która przyjmuje wartość logiczną wskazującą, czy chcemy wyłączyć kontrolę. Dodajemy po prostu atrybut "disabled" i pozwalamy wbudowanemu HtmlHelperowi na podnoszenie ciężarów.
klasa Rozbudowa i metoda:
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;
}
}
Potem wystarczy odwołać swoją nową klasę i wywołać @Html.TextBoxFor(m => m.SomeValue, new { @class = "someClass" }, <Your bool value>)
Warto zauważyć, że trzeba by określić te rozszerzenia do jakichkolwiek przeciążeń TextBoxFor chciałbyś użyć, ale wydaje się, że rozsądny kompromis. Możesz również wykorzystać większość tego samego kodu dla innych HtmlHelperów, do których chcesz dodać funkcję.
to działa, jestem winien Ci piwo! Dzięki – Tony
będę czekać na to xD –
, który jest dość bezczelny:> ale lubię to. Dodaję jednak (bardziej delikatny) wariant mojego własnego. – goofballLogic