1

エディター テンプレートの使用とカスタマイズに関する Brad Wilson の優れたシリーズに従って、Object.cshtml をShared\EditorTemplatesフォルダーに追加してみました。テンプレートはレンダリングされますが、[HiddenInput(DisplayValue = false)]on a model プロパティは非表示<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 に答える