Я пытаюсь найти хороший способ иметь «глобальных» членов (таких как CurrentUser, Theme и т. Д.) Во всех моих частях, а также в моих представлениях.
Я не хочу иметь логический класс, который может возвращать эти данные (например, BL.CurrentUser). Я действительно считаю, что это должно быть частью модели в моих представлениях, поэтому я попытался наследовать от BaseViewData с этими членами. В моих контроллерах тем или иным образом (фильтр или базовый метод в моем BaseController) я создаю экземпляр наследующего класса и передаю его как данные представления. До этого момента все было идеально, потому что тогда у меня есть данные моего вида, доступные в основном представлении с базовыми членами. Но как насчет частичных?
Если у меня есть простой фрагмент, который должен отображать сообщение в блоге, он выглядит следующим образом:
<%@ Control Language="C#" AutoEventWireup="true" Inherits="ViewUserControl<Post>" %>
и простой код для визуализации этого частичного на мой взгляд (что его модель. Стоимость IEnumerable<Post>
):
<%foreach (Post p in this.Model.Posts) {%>
<%Html.RenderPartial("Post",p); %>
<%}%>
Поскольку модель части не является BaseViewData, у меня нет доступа к этим свойствам. Поэтому я попытался создать класс с именем PostViewData, который наследуется от BaseViewData, но тогда мои содержащие представления будут иметь код для фактического создания в них PostViewData, чтобы передать его частичному:
<%Html.RenderPartial("Post",new PostViewData { Post=p,CurrentUser=Model.CurrentUser,... }); %>
Или я мог бы использовать конструктор копирования
<%Html.RenderPartial("Post",new PostViewData(Model) { Post=p }); %>
Мне просто интересно, есть ли другой способ реализовать это, прежде чем я продолжу.
Есть предложения?
Спасибо!