Решение, опубликованное @epignosisx, работает, но может возникнуть проблема, если вы захотите добавить какой-либо другой атрибут, потому что вам придется добавить его в оба объекта (один с disabled
, а другой теперь пустой).
Еще хуже, если у вас есть какое-то другое свойство bool, потому что у вас будет четыре разных объекта, каждый для каждой комбинации.
Лучшее решение здесь (с небольшим количеством кода) состоит в созданииметод расширения для HtmlHelper для получения вашего логического свойства в качестве параметра.
public static MvcHtmlString TextBoxDisabledFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, bool disabled, object htmlAttributes = null)
{
return TextBoxDisabledFor(htmlHelper, expression, disabled, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
}
public static MvcHtmlString TextBoxDisabledFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, bool disabled, IDictionary<string, object> htmlAttributes)
{
if (htmlAttributes == null)
htmlAttributes = new Dictionary<string, object>();
if (disabled)
htmlAttributes["disabled"] = "disabled";
return htmlHelper.TextBoxFor(expression, htmlAttributes);
}
Здесь есть еще один пример