说实话,我不知道该怎么称呼它或如何开始搜索它。
我有一个标准布局的显示页面。
<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>
很抱歉没有更清楚。
答案 0 :(得分:2)
部分不需要告诉@model是什么,它会使用父@model,如果你取出部分中的@model有帮助吗?
如果我将此作为观点......
@model MyApp.Models.ModelName
@{
ViewBag.Title = "Test";
}
<h2>Test</h2>
<div>
<div class="editor-label">
@Html.LabelFor(m => m.Field)
</div>
<div class="editor-field">
@Html.TextBoxFor(m => m.Field)
@Html.ValidationMessageFor(m => m.Field)
</div>
</div>
@Html.Partial("_partial", Model) @*note I pass the whole model*@
这是部分......
@model MyApp.Models.ModelName
<div>
<div class="editor-label">
@Html.LabelFor(m => m.Field)
</div>
<div class="editor-field">
@Html.TextBoxFor(m => m.Field)
@Html.ValidationMessageFor(m => m.Field)
</div>
</div>
然后它做了我认为你想做的事情(事实上,它做了两次,但你可以从主视图中删除代码)。 我不确定它会给你带来巨大的好处。也许我误会了什么。
答案 1 :(得分:1)
您无需ToString()
您的财产。
@Html.LabelFor(m => m)
<强>已更新强>
根据您想要做的事情,重新使用视图,看看这个比正常帖子更长的关于重用验证和部分视图的内容,我写到了ASP.NET MVC 3 - Model Validation的答案。它非常详细。
答案 2 :(得分:1)
听起来你想要一个DisplayFor(m =&gt; m):
功能参考:http://buildstarted.com/2010/09/29/htmlhelper-guide-for-mvc-3-part-2/
答案 3 :(得分:1)
我认为您可能应该对类型使用显示/编辑器模板,您的模型包括该类型的3个字段。
@Html.Partial("_BillField", Model.Field1)
@Html.Partial("_BillField", Model.Field2)
@Html.Partial("_BillField", Model.Field3)
为类型而不是部分视图定义模板可能更有效。有关详细比较,请参阅ASP.NET MVC 3 - Partial vs Display Template vs Editor Template。
在这种情况下,您的视图会更像:
@Html.DisplayFor(model => model.Field1)
@Html.DisplayFor(model => model.Field2)
@Html.DisplayFor(model => model.Field3)
您的模型将是:
public class model
{
[DisplayName("Field1")]
public ComplexType Field1 {get;set;}
[DisplayName("Field2")]
public ComplexType Field2 {get;set;}
[DisplayName("Field3")]
public ComplexType Field3 {get;set;}
}
或者显示名称的数据注释。
答案 4 :(得分:0)
添加了一个新的答案,因为另一个人在澄清之后没有回答这个问题。 这篇文章LabelFor extension应该能够根据您的需要进行调整,而不是更好地覆盖以创建您自己的扩展。
您需要稍微改变一下,因为您需要使用m=>m.Field
语法。但我确信这应该做你需要的,而不必使用局部视图。
如果您使用Model.Field
语法,您将只发送Field属性的实际值,例如您的小数的1.23,您需要使用m=>m.Field
获得的不仅仅是评估该属性,以便您可以更改标签中的文本。