我有一个ASP.NET MVC 4项目。我想在另一个WebForms项目的2个.aspx
页面中添加这个MVC项目。我有几个问题:
答案 0 :(得分:16)
解决方案:
事实证明,将 .aspx 页面添加到现有的 MVC 项目比将mvc添加到.aspx更容易实现。对我来说最有趣的事情是发现在一个项目范围内的webforms和MVC在IIS上共享一个运行时。
所以我做了什么:
以下代码提供了有关如何在WebForms中实现 RenderPartial 方法的信息:
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 );
}
}
将其添加到.aspx页面的codebehind.cs。然后你可以从这样的webforms中调用它:
<% WebFormMVCUtil.RenderPartial( "ViewName", this.GetModel() ); %>
由于我的所有网页都只共享了“菜单”,因此我将其添加到部分视图中,然后在 _Layout.chtml
中调用它@Html.Partial("_Menu")
并在 MasterPage.Master 中像这样:
<% WebFormMVCUtil.RenderPartial("_Menu", null ); %>
这就是它的全部。因此,我的 _Layout.chtml 和 MasterPage.Master 使用相同的共享部分视图。我只需浏览它们即可访问 .aspx 页面。如果路由系统存在一些问题,可以在App_Start中的routeConfig中添加routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
。
我使用的来源: