Частичный контроль MVC - PullRequest
       16

Частичный контроль MVC

0 голосов
/ 06 октября 2009

Хорошо. У меня есть система меню с меню (динамически генерируемая из поля базы данных). Я хочу включить эту систему меню в несколько представлений - все из которых используют различные контроллеры и модели.

<ul>
            <li><a href="#">All</a></li>
                <%
                    foreach (var curCat in Model.CategoryList)
                    {
                %>
                        <li><a href="/messagecentre/category/<%=curCat.CategoryID.ToString() %>"><%= Html.Encode(curCat.Category1)%></a></li>               
                <% 
                   } 
                %>
        </ul>

Какой лучший способ достичь этого? Нужно ли просто передавать модель Categories для каждой другой модели, чтобы я мог выполнять синтаксис RenderPartial ("Name", Model)?

Ответы [ 2 ]

0 голосов
/ 06 октября 2009

Третий способ - проверить фьючерсы MVC на codeplex, в частности, метод Html.RenderAction. Затем вы можете создать контроллер, который просто выводит меню и позволяет ему работать. Не нужно загрязнять ViewData.

0 голосов
/ 06 октября 2009

Есть два разных способа сделать это.Вы можете включить категории в каждую модель или можете сохранить категории в ViewDataDictionary и получить их оттуда.Обычно я хотел бы расширить модель данными, чтобы я мог использовать ее строго типизированным способом, но в этом случае - поскольку данные вездесущи - я бы, вероятно, пошел с ViewData и использовал бы базовый контроллер для заполненияэто (вероятно, в OnActionExecuted), так что он всегда доступен.В моем частичном представлении я бы преобразовал элемент ViewData в строго типизированный объект и использовал его оттуда.

Причина, по которой я бы сделал это, заключается в том, чтобы мои модели оставались чистыми для фактического представления, которое не нужнознать о данных для меню.Мне кажется, что это разумное исключение из обычного пути создания модели для конкретного вида.

<% var categories = ViewData["categories"] as IEnumerable<Category>; %>
<ul>
    <li><a href="#">All</a></li>
        <%
    foreach (var curCat in categories)
    {
%>
        <li><a href="/messagecentre/category/<%=curCat.CategoryID.ToString() %>"><%= Html.Encode(curCat.Category1)%></a></li>               
<% 
   } 
%>
</ul>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...