這裏是我實施模型格式化爲一個優雅的可重用的代碼。
有一個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);
}
}
}
不要忘記以下行的瀏覽文件夾添加到Web.config:
<add namespace="MvcPlay.HelperExtensions" />
<add namespace="MvcPlay.HtmlStringFormatting"/>
Th將自動包括格式化程序和助手擴展,因此您不需要將其包含在您要使用它的每個視圖中。