ASP.NET MVC ViewPage отображается в ViewPage

Мне интересно, можно ли отображать ViewPage внутри ViewPage.

Обычно у вас было бы это:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<my_object>"%>

а затем на странице вы можете отобразить пользовательский элемент управления:

<%Html.RenderPartial("~/Views/Shared/mycontrol.ascx", this.ViewData);%>

Однако я хотел бы отобразить ViewPage в ViewPage. Причина? Я работаю над очень большим проектом с 10+ разработчиками и уже написал много кода. Уже написан большой кусок, который динамически отображает пользовательский интерфейс, однако существует более 15 методов, которые проходят через ViewPage.

Другими словами, я вызываю это в ViewPage:

<%this.RenderUI();

И заглушка метода такова:

public static void RenderUI(this ViewPage viewPage)

Итак, чтобы повторно использовать большую часть кода, я хотел бы вытащить вызов this.RenderUI() в свою собственную ViewPage, но затем включить это на некоторых ViewPages. Это сложная ситуация, и это звучит ненужно, но в противном случае потребуется много переделки кода. Кто-нибудь знает, можно ли этого добиться?


person macca1    schedule 18.02.2010    source источник


Ответы (1)


Визуализируйте свое подпредставление в основном представлении, используя RenderAction() вместо RenderPartial(). Это позволяет вам сохранить свой контроллер и представление для каждого подпредставления и «внедрить» вывод каждой комбинации контроллера/подпредставления в любое основное представление в любом месте по вашему выбору в основном представлении.

Такое расположение должно упростить управление каждым из представлений и подпредставлений. Этот подход напоминает «веб-части» в традиционных ASP.NET или SharePoint. Это более модульный подход, обеспечивающий лучшее повторное использование.

person Robert Harvey    schedule 18.02.2010
comment
Спасибо, мне нравится эта идея. Я собираюсь попробовать. Есть ли у кого-нибудь еще предложения? - person macca1; 19.02.2010