如果我编写一个自定义DisplayFor
助手,例如:
public static HtmlString MyDisplayFieldFor<TModel, TValue>(this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression, object additionalViewData = null)
{
//...
}
如何确定传入字段的类型,以便不同类型的字段可以具有自定义显示逻辑?
例如,我可以用三种类型来使用此方法:
@Html.MyDisplayFieldFor(e=>e.Name) //string
@Html.MyDisplayFieldFor(e=>e.DepartmentSelectList) //SelectList
@Html.MyDisplayFieldFor(e=>e.CupsOfTeaPerDay) // int
在帮助程序方法中访问此类型信息的最佳方法是什么?
从表达式中获取值类型
public static HtmlString MyDisplayFieldFor<TModel, TValue>(this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression, object additionalViewData = null) {
var valueType = typeof(TValue);
//...other code
}
无需
检查传递值的类型。 ASP.NET MVC 允许您创建根据字段类型自动选择的显示模板。
例如,您可以为示例中的SelectList
创建此模板,并将其放置在Views/Shared/DisplayTemplates/SelectList.cshtml
项目文件夹中。
@model SelectList
<!-- Replace this with the display code you prefer -->
<div class="select-list">@Model.ToString()</div>
这使您可以将 HTML 代码保留在视图中。