2009-11-04 71 views
1

我有一个FormViewModel,它包含一个LINQ to SQL结果集和一个List对象。如何在字段中引用ViewData.Model中的字段值字符串名称

结果集是可以在视图中显示的一组所有可能的字段值。

这些Model.AllFields.Field1,Model.AllFields.Field2,...

有一个列表(Model.UserFields),它包含的字段的子集的字符串名称在AllFields一个特定的用户想要显示。

列表中包含(Model.UserFields.ItemSource)字段名称 “字段3”, “Field16”,...

我怎么能做到这一点,其中item.ItemSource是串字段名:(伪VB)

<%For Each item In Model.UserFields%> 
    <td><%=Html.Encode(Model.AllFields(item.ItemSource))%></td> 
<%Next item%> 

我知道我可以改变模型以不同的方式来做到这一点,但有通过像上面的“间接”引用的方式做到这一点?

感谢

回答

0

一个简单的方法(不一定是最快的,但可能不够快,几乎所有的用例)是使用反射。我的VB有点生疏,但代码是这样的:

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

工程太好了。有没有办法在GetValue中处理空值? – 2009-11-04 18:28:02

+0

有几种方法可以做到这一点,但在这一点上,这段代码的复杂性可能比您想要的更复杂。我建议在你的视图页面创建一个辅助方法(例如在runat = server脚本块中),它接受字段名并返回字符串值(如果值为空,则为空字符串)。 – 2009-11-04 18:44:52

+0

感谢您的帮助! – 2009-11-04 21:05:34

相关问题