我有一个标准布局的显示页面。
<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
)。当您直接将模型成员传递到部分时,您正在更改该表达式,因此它无法再在原地访问该成员,只能访问该成员的类型和值,因为它缺少模型的上下文。 - jpaugh