Вид строго типизированный с ViewModel не генерирует поля автоматически - PullRequest
1 голос
/ 25 июля 2010

Когда я создаю представление и привязываю его непосредственно к одному классу, у которого есть свойства, которые я хочу показать в представлении, поля (текстовые поля и т. Д.) Для него создаются автоматически.Но когда я создаю ViewModel для инкапсуляции более одного объекта с данными, этого не происходит.Есть ли способ заставить это работать для определенного объекта, который находится внутри ViewModel?

Спасибо.

1 Ответ

0 голосов
/ 26 июля 2010

Спасибо комментаторам за то, что дразнили детали ответа.

В редакторе MVC по умолчанию для «главного» шаблона Object.ascx есть оператор if, предотвращающий это.

Чтобы изменить это поведение, вам нужно заменить базовый шаблон /EditorTemplates/Object.ascx своим собственным. Это хорошая копия шаблона, запеченного в MVC:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<% if (Model == null) { %>
    <%= ViewData.ModelMetadata.NullDisplayText %>
<% } else if (ViewData.TemplateInfo.TemplateDepth > 1) { %>
    <%= ViewData.ModelMetadata.SimpleDisplayText %>
<% } else { %>
    <table cellpadding="0" cellspacing="0" border="0">
    <% foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForDisplay && !ViewData.TemplateInfo.Visited(pm))) { %>
        <% if (prop.HideSurroundingHtml) { %>
            <%= Html.Display(prop.PropertyName) %>
        <% } else { %>
            <tr>
                <td>
                    <div class="display-label" style="text-align: right;">
                        <%= prop.GetDisplayName() %>
                    </div>
                </td>
                <td>
                    <div class="display-field">
                        <%= Html.Display(prop.PropertyName) %>
                    </div>
                </td>
            </tr>  
        <% } %>
    <% }   %>
    </table>
<% } %>

Эта строка:

<% } else if (ViewData.TemplateInfo.TemplateDepth > 1) { %>

сказать шаблону, чтобы он спускался только на один уровень графа вашего объекта. Просто замените 1 на 2 или удалите его полностью, чтобы изменить степень детализации MVC.

Подробнее об этом шаблоне можно узнать здесь: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-4-custom-object-templates.html

(мужик, я должен создать макрос для связи с материалами Брэда Уилсона, я делаю это все время);)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...