これは、エレガントな再利用可能なコードとしてモデルをフォーマットするための私の実装です。
HtmlStringFormatter.Create()
デリゲートを渡して独自の匿名フォーマッタを作成できる があります。
コードサンプル:
// This just upper case all the letters.
@Html.DisplayFormatFor(model => model.Address, HtmlStringFormatter.Create(s=> s.ToUpper()))
カスタム フォーマッタを作成する場合は、デリゲート プロパティから派生さHtmlStringFormatter
せて、必要な操作に設定します。
コードサンプル:
// Here I use the Capital Letter custom formatter.
@Html.DisplayFormatFor(model => model.Address, new CapitalLetterFormatter())
すべてのクラス:
namespace MvcPlay.HelperExtensions
{
public static class HelperExtensions
{
public static MvcHtmlString DisplayFormatFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, HtmlStringFormatter formatter)
{
var output = helper.DisplayFor(expression);
string formatted = formatter.Delegate.Invoke(output.ToString());
return MvcHtmlString.Create(formatted);
}
}
}
namespace MvcPlay.HtmlStringFormatting
{
public class HtmlStringFormatter
{
public delegate string FormatDelegate(string s);
public FormatDelegate Delegate;
public Expression<FormatDelegate> formatExpression;
private HtmlStringFormatter(FormatDelegate expression)
{
Delegate = expression;
}
protected HtmlStringFormatter()
{
}
public static HtmlStringFormatter Create(FormatDelegate expression)
{
return new HtmlStringFormatter(expression);
}
}
public class CapitalLetterFormatter : HtmlStringFormatter
{
public CapitalLetterFormatter()
{
Delegate =
s => new CultureInfo("en-US", false).TextInfo.ToTitleCase(s).ToString(CultureInfo.InvariantCulture);
}
}
}
Views フォルダーの Web.Config に次の行を追加することを忘れないでください。
<add namespace="MvcPlay.HelperExtensions" />
<add namespace="MvcPlay.HtmlStringFormatting"/>
これにより、フォーマッターとヘルパー拡張機能が自動的に含まれるため、使用するすべてのビュー内に含める必要はありません。