Ответ 1
Решение:
Как оказалось, добавление страниц .aspx в существующий проект MVC - это еще более простая задача, чем добавление mvc в .aspx. Самое интересное для меня было выяснить, что и веб-формы, и MVC в рамках одного проекта разделяют среду одна на IIS.
Итак, что я сделал:
- Добавлены страницы .aspx из другого проекта в root моего проекта MVC
- Создана новая главная страница для моих веб-форм страниц (щелкните правой кнопкой мыши project- > add- > new item- > Master Page)
- Чтобы сделать Мастер-страницу WF и _Layout.chtml из MVC, поделитесь одним и тем же Мастером 'Вид, я обнаружил эта замечательная статья, которая позволяет вам называть что-то похожее на метод @Html.RenderPartial() на странице .aspx
-
В следующем коде представлена информация о том, как реализовать метод RenderPartial в WebForms:
public class WebFormController : Controller { } public static class WebFormMVCUtil { public static void RenderPartial( string partialName, object model ) { //get a wrapper for the legacy WebForm context var httpCtx = new HttpContextWrapper( System.Web.HttpContext.Current ); //create a mock route that points to the empty controller var rt = new RouteData(); rt.Values.Add( "controller", "WebFormController" ); //create a controller context for the route and http context var ctx = new ControllerContext( new RequestContext( httpCtx, rt ), new WebFormController() ); //find the partial view using the viewengine var view = ViewEngines.Engines.FindPartialView( ctx, partialName ).View; //create a view context and assign the model var vctx = new ViewContext( ctx, view, new ViewDataDictionary { Model = model }, new TempDataDictionary() ); //render the partial view view.Render( vctx, System.Web.HttpContext.Current.Response.Output ); } }
Добавьте его на codebehind.cs вашей страницы .aspx. Затем вы можете вызвать его из веб-форм следующим образом:
<% WebFormMVCUtil.RenderPartial( "ViewName", this.GetModel() ); %>
-
Так как у меня было только "меню", которое было распространено среди всех моих страниц, я добавил его в частичный вид, а затем вызвал его в _Layout.chtml
@Html.Partial("_Menu")
и MasterPage.Master:
<% WebFormMVCUtil.RenderPartial("_Menu", null ); %>
Вот и все. В результате мои _Layout.chtml и MasterPage.Master используют одни и те же общие частичные представления. И я могу использовать страницы .aspx, просто перемещаясь по ним. Если у вас есть проблемы с системой маршрутизации, вы можете добавить routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
в свой маршрутConfig в App_Start.
Источники, которые я использовал:
- Объединить asp net mvc с веб-формами
- Смешивание веб-форм и ASP.NET MVC
- MixingRazorViewsAndWebFormsMasterPages
- Как включить частичный вид внутри веб-формы
Я надеюсь, что это поможет кому-то позже.