如何判断传递给自定义Html.DisplayFor助手的字段类型?

时间:2017-03-22 09:13:47

标签: c# asp.net-mvc

如果我编写自定义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

在Helper方法中访问此类型信息的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

从表达式

中获取值类型
public static HtmlString MyDisplayFieldFor<TModel, TValue>(this HtmlHelper<TModel> html,
        Expression<Func<TModel, TValue>> expression, object additionalViewData = null) {

    var valueType = typeof(TValue);
    //...other code

}

答案 1 :(得分:0)

您无需检查传递值的类型。 ASP.NET MVC允许您创建基于字段类型自动选择的display templates

您可以为示例中的images_upload_handler: function (blobInfo, success, failure) { success("data:" + blobInfo.blob().type + ";base64," + blobInfo.base64()); } 创建此模板,并将其放在SelectList项目文件夹中。

Views/Shared/DisplayTemplates/SelectList.cshtml

这使您可以在视图中保留HTML代码。