如何判断传递到自定义 Html.DisplayFor 帮助程序的字段的类型



如果我编写一个自定义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 代码保留在视图中。

最新更新