我想用模板对模型的一些控件进行分组(最好不要用C#硬编码)。如果布局发生变化,我可以编辑模板的html,而不是在每个视图中更改它。
这是我到目前为止所得到的:
的视图\ EditorTemplates \ InputBlock.cshtml
<section class="pure-g">
@foreach (KeyValuePair<string, object> item in ViewData)
{
if (ViewData.ModelMetadata.Properties.Any(x => x.PropertyName == item.Key))
{
<div class="pure-u-1-2">
@Html.Label(item.Key)
@Html.Editor(item.Key)
@Html.ValidationMessage(item.Key)
</div>
}
}
</section>
我正在使用这样的模板:
@Html.EditorFor(model => model, "InputBlock", new { Model.FirstName, Model.LastName, Model.LastLogin, Model.Id })
这样可行,它会使用正确的类型呈现所有控件。
问题是它忽略了添加到模型的任何属性,如 [Required] 或 [DisplayName] ,因此标签显示属性名称而不是设置为的值DisplayName,即使ModelMetadata中的属性设置了正确的DisplayName。
服务器端验证确实有效。定义 [Required] 或 [StringLength] 时,不会添加不显眼的验证属性,只设置特定数据类型的默认属性(如datetime或int)< / p>
如何在属性仍然有效的模板中轻松地对多个控件进行分组,最好是可以更改而无需重新编译项目?