给定一个看起来像这样的模板?
<div class="form-group">
<label class="control-label col-md-6">@Html.LabelFor(_ => _.A)</label>
<div class="col-md-6">
@Html.EditorFor(_ => _.A)
@Html.ValidationMessageFor(_ => _.A, null, new { @class = "help-block" })
</div>
</div>
<div class="form-group">
<label class="control-label col-md-6">@Html.LabelFor(_ => _.B)</label>
<div class="col-md-6">
@Html.EditorFor(_ => _.B)
@Html.ValidationMessageFor(_ => _.B, null, new { @class = "help-block" })
</div>
</div>
(and repeat for every field)
如何正确参数化。编辑器模板似乎没有好好结合。
换句话说,我认为需要的是一个将lambda作为模型参数的模板?
TemplateFor(x => x.Other)
其中模板包含所有样板标记,并在正确的位置调用EditorFor
,LabelFor
和ValidationMessageFor
。
EditorFor
需要根据属性的类型选择正确的模板,就像通常那样。
答案 0 :(得分:1)
您可以将此全部内容放入编辑器模板中。例如,您可以为String
:
<强>视图\共享\ EditorTemplates \ String.cshtml 强>
<div class="form-group">
<label class="control-label col-md-6">@Html.Label("")</label>
<div class="col-md-6">
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue)
@Html.ValidationMessage("", null, new { @class = "help-block" })
</div>
</div>
然后,对于任何string
属性,您只需在视图中添加以下内容:
@Html.EditorFor(m => m.SomeStringProperty)
注意,有关编辑器模板的两件事:
*For
方法,而只是普通的HTML帮助程序。这使您可以回避需要携带初始表达式的问题。冲洗并重复所有其他类型。有关更深入的概述,请参阅我的帖子Display Templates and Editor Templates for Fun and Profit。