Шаблоны редактора MVC 3, кажется, не уважают HiddenInput - PullRequest
1 голос
/ 30 января 2012

Следуя замечательной серии Брэда Уилсона о , используя и настраивая шаблоны редактора , я попытался добавить Object.cshtml в папку Shared\EditorTemplates.Шаблон отображается, но [HiddenInput(DisplayValue = false)] в свойстве модели не отображает скрытый <input type="hidden" ... />, как ожидалось.Использование [HiddenInput(DisplayValue = true)] отображает скрытые и видимые элементы, как и ожидалось.

Я убедился, что шаблон по умолчанию для Object работает нормально и отображает скрытые входные данные.Это проблема только при создании пользовательского шаблона на основе серии Брэда выше.

Ответы [ 2 ]

1 голос
/ 30 января 2012

Похоже, что-то изменилось. Изучив источник 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>")
        }
    }
}
0 голосов
/ 20 августа 2014

Я немного прибрала свою версию для всех, кому небезразлично:

@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>
    }
}
...