【发布时间】:2017-11-16 11:29:18
【问题描述】:
这适用于 Razor 视图中的 ASP.NET MVC 4 应用程序。我正在将模型传递给局部视图,并尝试遍历模型中包含的给定属性列表以显示为表格。
鉴于List<string> propertyNames 之类的内容,在此表中,我想以如下结构输出DisplayNameFor 和属性值:
<tr>
<th>@Html.DisplayNameFor(Model.property)</th>
<td>@Model.property</td>
</tr>
我必须在部分中执行几次,因为不同的属性对应于部分中的不同 div 元素,其中将插入不同的表,所以我创建了一个助手,这就是我挂断电话的地方.首先,我知道如何做到这一点的唯一方法是反射,我已经读过反射是昂贵的,尤其是一次只做一个属性。另外,使用这种方法,我无法让@Html.DisplayNameFor 正常工作,因为使用反射,我不太了解语法:
@helper IterateDetailPropertyNames(List<string> propertyNames) {
foreach (var property in propertyNames)
{
<tr>
<th>
@Html.DisplayNameFor(m => m.GetType().GetProperty(property).GetValue(Model, null));
@*Error: Templates can be used only with field access, property access...*@
</th>
<td>
@Model.GetType().GetProperty(property).GetValue(Model, null)
</td>
</tr>
}
}
我怎样才能完成这项工作并改进它?
【问题讨论】:
-
你试过
@Html.DisplayNameFor(m => m[property]);不涉及反射... -
如果您的视图正在使用模型,那么您可以使用
ModelMetadata访问模型的所有属性,包括其显示名称。您是否只想在表格中显示每个属性的显示名称和属性值? -
@StephenMuecke 是的。这就是它的要点。
-
然后使用模型
ModelMetadata是要走的路。现在没时间,但我会在 30 分钟左右添加答案。同时,您可能对this project 感兴趣 - 还没有开始编写文档,但在here 中进行了描述
标签: asp.net-mvc-4 razor