私たちは実際に同じ問題に遭遇しました。最終的に、オーバーロードされたパラメーターを使用して拡張メソッドを実装しました。これは、コントロールを無効にするかどうかを示すブール値を受け取ります。必要に応じて「disabled」属性を追加し、組み込みのHtmlHelperに手間のかかる作業を処理させます。
拡張クラスとメソッド:
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;
}
}
次に、新しいクラスを参照して呼び出す必要があります@Html.TextBoxFor(m => m.SomeValue, new { @class = "someClass" }, <Your bool value>)
使用したいTextBoxForオーバーロードのいずれかに対してこれらの拡張機能を定義する必要があることに注意してください。ただし、これは妥当なトレードオフのようです。機能を追加したい他のHtmlHelperにも同じコードのほとんどを利用できます。