在Brad Wilson关于using and customizing editor templates的优秀系列文章之后,我尝试在Shared\EditorTemplates文件夹中添加一个Object.cshtml。模板会呈现,但模型属性上的[HiddenInput(DisplayValue = false)]不会像预期那样呈现隐藏的<input type="hidden" ... />。使用[HiddenInput(DisplayValue = true)]可以按预期呈现隐藏元素和可见元素。
我已经验证了Object的默认模板工作正常,并呈现了隐藏的输入。只有在基于上面的Brad系列构建自定义模板时才会有问题。
发布于 2012-01-31 01:48:57
看起来有些东西变了。查看MVC3源代码,我发现prop.HideSurroundingHtml用于确定何时打印周围的HTML,而不仅仅是打印隐藏的元素。以下模板允许为对象图呈现多个级别的编辑器:
@if (ViewData.TemplateInfo.TemplateDepth > 2)
{
@(ViewData.ModelMetadata.Model != null ?
ViewData.ModelMetadata.SimpleDisplayText :
ViewData.ModelMetadata.NullDisplayText)
}
else
{
foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForEdit && !ViewData.TemplateInfo.Visited(pm)))
{
if (!prop.HideSurroundingHtml)
{
if (!String.IsNullOrEmpty(Html.Label(prop.PropertyName).ToHtmlString()))
{
<div class="editor-label">@Html.Label(prop.PropertyName)</div>
}
@Html.Raw("<div class=\"editor-field\">")
}
@Html.Editor(prop.PropertyName)
if (!prop.HideSurroundingHtml)
{
@Html.ValidationMessage(prop.PropertyName, "*")
@Html.Raw("</div>")
}
}
}发布于 2014-08-20 11:38:36
我整理了一下我的版本,供关心的人参考:
@foreach (var modelMetadata in ViewData.ModelMetadata.Properties)
{
if (modelMetadata.HideSurroundingHtml == false)
{
if (!string.IsNullOrEmpty(Html.Label(modelMetadata.PropertyName).ToHtmlString()))
{
<div class="editor-label">
@Html.Label(modelMetadata.PropertyName)
</div>
}
<div class="editor-field">
@Html.Editor(modelMetadata.PropertyName)
</div>
}
}https://stackoverflow.com/questions/9067860
复制相似问题