【发布时间】:2012-01-03 04:34:23
【问题描述】:
说实话,我不知道该怎么称呼它或如何开始搜索它。
我有一个标准布局的显示页面。
<div>
<label for="field">Field Name:</label>
@Model.Field
</div>
在尝试使更改更友好的同时,我想制作一个模板,而不是用上面的代码输入每个字段。
我使用以下内容创建了一个局部视图:
@model System.Object
<div>
@Html.LabelFor(m => m)
@Html.DisplayFor(m => m)
</div>
在我看来,我添加了以下内容:
@Html.Partial("_BillField", Model.Field)
然后该模型具有如下描述:
public ModelName {
[Display(Name="Field Description")]
public decimal Field { get; set; }
}
这在主视图上有效,但在使用模板时标签丢失。我错过了什么?
更新:每@K。 Bob 我对局部视图进行了更改:
<div>
@Html.LabelFor(m => m)
@Html.DisplayFor(m => m)
</div>
更新 2:为了清楚我想要什么。
最后,我希望能够做到:
@Html.Partial("_BillField", Model.Field1)
@Html.Partial("_BillField", Model.Field2)
@Html.Partial("_BillField", Model.Field3)
并且有等价于:
<div>
<label for="field1">Field 1 Name:</label>
@Model.Field1
</div>
<div>
<label for="field2">Field 2 Name:</label>
@Model.Field2
</div>
<div>
<label for="field3">Field 3 Name:</label>
@Model.Field3
</div>
很抱歉没有说得更清楚。
【问题讨论】:
-
请注意,
LabelFor等人的参数不是Func,而是Expression<Func>。这是因为它可以使用它通过反射访问模型成员(即它的值、类型、名称和属性,例如DisplayName)。当您将模型成员直接传递给部分时,您正在更改该表达式,因此它不能再就地访问该成员,并且只能访问该成员的类型和值,因为它缺少模型的上下文. -
您可能想要的是自定义模型活页夹或模型活页夹模板,尽管我没有这方面的经验。
标签: asp.net-mvc-3 razor partial-views