Включение частичного представления MVC на страницах форм ASP.NET - PullRequest
4 голосов
/ 08 сентября 2010

У нас есть старые страницы ASP.NET Forms и новые представления MVC и частичные представления в одном решении.Некоторые страницы на сайте являются MVC, а устаревшие страницы - это формы.Одна из этих устаревших страниц форм - это элемент управления .ascx.

Можно ли как-то вставить частичное представление MVC (.ascx) в этот элемент управления .ascx форм?

Ответы [ 3 ]

2 голосов
/ 08 сентября 2010

Я использую эту технику для встраивания MVC-частичек в страницы веб-форм. Не уверен, работает ли он в пользовательском элементе управления webforms, но это должно быть возможно.

Шаг 1. В части MVC вашего приложения создайте следующую вспомогательную функцию. Это делает всю тяжелую работу:

namespace MvcApplication
{
    // create a dummy controller
    public class DummyController : Controller
    {
    }

    public static class MvcPartialHelper
    {
        public static void RenderPartial(string partialViewName, object model)
        {
            ControllerContext controllerContext;
            HttpContextBase httpContextBase;
            IView view;
            RouteData routeData;
            ViewContext viewContext;

            httpContextBase = new HttpContextWrapper(HttpContext.Current);
            routeData = new RouteData();
            routeData.Values.Add("controller", typeof(DummyController).Name);
            controllerContext = new ControllerContext(new RequestContext(httpContextBase, routeData), new DummyController());
            view = ViewEngines.Engines.FindPartialView(controllerContext, partialViewName).View;
            viewContext = new ViewContext(controllerContext, view, new ViewDataDictionary { Model = model }, new TempDataDictionary(), httpContextBase.Response.Output);
            view.Render(viewContext, httpContextBase.Response.Output);
        }
    }
}

затем, внутри вашей веб-страницы (или пользовательского элемента управления):

добавить следующее для ссылки на вышеприведенное:

<%@ Import Namespace="MvcApplication" %>

и затем, когда вам нужно отобразить частичное, вы можете добавить что-то вроде:

<% MvcPartialHelper.RenderPartial("~/views/shared/TestPartial.ascx", "hello - this is my model"); %>

где вторым параметром является ваша «Модель».

Я широко использую эту технику в смешанной среде MVC / Webforms, и она работает как сон!

Наслаждайтесь

0 голосов
/ 08 сентября 2010

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

Дайте мне знать, если вам нужны подробные инструкции / пример

0 голосов
/ 08 сентября 2010

Нет, поскольку у вас нет Html-помощника, необходимого для выполнения этой вставки :

<%= Html.RenderPartial("foo") %>

Кроме того, ваша часть MVC строго типизирована (неэто) и у вас не будет доступа к модели.

Кроме того, когда вы переносите устаревшее приложение веб-форм в ASP.NET MVC, оно должно быть наоборот.

...