Asp.net mvc 如何通过字段字符串名称引用ViewData.Model中的字段值

Asp.net mvc 如何通过字段字符串名称引用ViewData.Model中的字段值,asp.net-mvc,Asp.net Mvc,我有一个FormViewModel,它包括一个LINQ到SQL结果集和一个List对象 结果集是视图中显示的所有可能字段值的集合 这些是Model.AllFields.Field1、Model.AllFields.Field2 有一个列表(Model.UserFields),其中包含特定用户希望显示的所有字段中字段子集的字符串名称 该列表包含(Model.UserFields.ItemSource)字段名“Field3”、“Field16” 如何实现这一点,其中item.ItemSource是字

我有一个FormViewModel,它包括一个LINQ到SQL结果集和一个List对象

结果集是视图中显示的所有可能字段值的集合

这些是Model.AllFields.Field1、Model.AllFields.Field2

有一个列表(Model.UserFields),其中包含特定用户希望显示的所有字段中字段子集的字符串名称

该列表包含(Model.UserFields.ItemSource)字段名“Field3”、“Field16”

如何实现这一点,其中item.ItemSource是字符串fieldname:(伪VB)


我意识到我可以改变模型,以不同的方式实现这一点,但是有没有一种方法可以通过上面提到的“间接”引用来实现这一点

多亏了一个简单的方法(不一定是最快的,但可能对于几乎所有的用例来说都足够快)就是使用反射。我的VB有点生疏,但代码是这样的:

<%For Each item In Model.UserFields%>
    <td><%=Html.Encode(Model.AllFields.GetType().GetProperty(item.ItemSource).GetValue(Model.AllFields, Nothing).ToString())%></td>
<%Next item%>


效果很好。有没有一种方法可以处理GetValue中的空值?有几种方法可以做到这一点,但在这一点上,代码的复杂性可能比您希望的要高。我建议在视图页面中创建一个helper方法(例如,在runat=server脚本块中),该方法接受字段名并返回字符串值(如果值为null,则返回空字符串)。
<%For Each item In Model.UserFields%>
    <td><%=Html.Encode(Model.AllFields.GetType().GetProperty(item.ItemSource).GetValue(Model.AllFields, Nothing).ToString())%></td>
<%Next item%>