1

在 Brad Wilson 关于使用和自定义编辑器模板的优秀系列之后,我尝试将 Object.cshtml 添加到Shared\EditorTemplates文件夹中。模板呈现,但模型属性的on 未按预期[HiddenInput(DisplayValue = false)]呈现隐藏。<input type="hidden" ... />使用[HiddenInput(DisplayValue = true)]按预期呈现隐藏和可见元素。

我已经验证了默认模板可以Object正常工作并呈现隐藏的输入。仅在基于上述 Brad 的系列构建自定义模板时会出现问题。

4

2 回答 2

1

好像有什么变了。检查 MVC 3 源代码,我发现它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>")
        }
    }
}
于 2012-01-30T17:48:56.770 回答
0

我为任何关心的人整理了我的版本:

@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>
    }
}
于 2014-08-20T03:38:35.753 回答