如何将.aspx页面添加到现有的MVC 4项目中?

时间:2014-08-19 14:05:55

标签: asp.net asp.net-mvc asp.net-mvc-4 razor webforms

我有一个ASP.NET MVC 4项目。我想在另一个WebForms项目的2个.aspx页面中添加这个MVC项目。我有几个问题:

  1. 我应该在哪里复制这个.aspx文件,我应该如何配置我的文件 路线?
  2. 如何告知此.aspx页面使用~/Shared/_Layout.chtml作为母版页?
  3. 此外,此 .aspx页面使用 .ascx控件。我应该在哪里存放它们?
  4. 我应该如何修改 web.config文件?
  5. 我查看了links问题中发布的this,但它们似乎已经过时了。很多链接解释了如何将MVC添加到WebForms,但我一直在寻找。

    任何有用的链接将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:16)

解决方案:

事实证明,将 .aspx 页面添加到现有的 MVC 项目比将mvc添加到.aspx更容易实现。对我来说最有趣的事情是发现在一个项目范围内的webforms和MVC在IIS上共享一个运行时。

所以我做了什么:

  1. 将其他项目中的 .aspx 页面添加到 MVC 项目的 root
  2. webforms 页面创建了新的母版页(右键单击项目 - > add-> new item->母版页)
  3. 为了让WF的母版页和MVC的 _Layout.chtml 共享相同的 Master'View',我发现{{3允许您在 .aspx页面
  4. 中调用与 @ Html.RenderPartial()类似的方法
  5. 以下代码提供了有关如何在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() ); %>
    
  6. 由于我的所有网页都只共享了“菜单”,因此我将其添加到部分视图中,然后在 _Layout.chtml

    中调用它
    @Html.Partial("_Menu")
    
  7. 并在 MasterPage.Master 中像这样:

        <% WebFormMVCUtil.RenderPartial("_Menu", null ); %>
    

    这就是它的全部。因此,我的 _Layout.chtml MasterPage.Master 使用相同的共享部分视图。我只需浏览它们即可访问 .aspx 页面。如果路由系统存在一些问题,可以在App_Start中的routeConfig中添加routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");

    我使用的来源:

    1. this great article
    2. Combine asp net mvc with webforms
    3. Mixing Web Forms and ASP.NET MVC
    4. MixingRazorViewsAndWebFormsMasterPages
    5. 我希望以后可以帮助别人。