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

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

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

  • 我应该在哪里复制这个.aspx文件以及我应该如何配置我的
    路线?
  • 我该怎么说 .aspx要使用的页面 ~/Shared/_Layout.chtml作为母版页?
  • 此外,这个 .aspx 页面使用 .ascx 控件。我应该在哪里存放它们?
  • 我应该如何修改 web.config 文件?

  • 我看过links发表于 this问题,但它们似乎已经过时了。许多链接解释了如何将 MVC 添加到 WebForms,但我一直在寻找。

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

    最佳答案

    解决方案:

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

    所以我做了什么:

  • 已添加 .aspx 从另一个项目到 的页面根我的 MVC 项目
  • 新建 主页 我的 网络表单 页面(右键项目->添加->新项目->母版页)
  • 为了使主页 WF 和 _Layout.chtml MVC 共享相同 主“ View ”我找到了 this great article允许你调用类似于 的东西@Html.RenderPartial() 内的方法 .aspx 页面
  • 以下代码提供了如何实现 的信息。渲染部分 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 );
        }
    
    }
    

    将其添加到 .aspx 页面的 codebehind.cs。然后你可以像这样从网络表单调用它:
    <% WebFormMVCUtil.RenderPartial( "ViewName", this.GetModel() ); %>
    
  • 由于我的所有页面中只有“菜单”共享,因此我将其添加到部分 View 中,然后在 中调用它。 _Layout.chtml
    @Html.Partial("_Menu")
    

  • 并在 MasterPage.Master 像这样:
        <% WebFormMVCUtil.RenderPartial("_Menu", null ); %>
    

    这就是它的全部内容。结果我的 _Layout.chtml MasterPage.Master 使用相同的共享部分 View 。我可以访问 .aspx 只需在页面上导航即可。如果路由系统有问题,可以添加routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");到你在 App_Start 中的 routeConfig。

    我使用的来源:
  • Combine asp net mvc with webforms
  • Mixing Web Forms and ASP.NET MVC
  • MixingRazorViewsAndWebFormsMasterPages
  • How to include a partial view inside a webform

  • 我希望它会在以后对某人有所帮助。

    关于asp.net - 如何将 .aspx 页面添加到现有的 MVC 4 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25385532/

    相关文章:

    .net - 如何找出无法加载的依赖项

    asp.net-mvc - DBContext、Repository 和 UnitOfWork 应该位于哪一层?

    c# - MVC4 C# - 想要将图像保存到文件夹并将 url 保存到数据库中

    c# - 当前不会命中断点,因为 Razor 代码中的源代码不同

    asp.net - 从下拉列表中选择 "Other"选项时如何验证所需的文本?

    c# - ASP .NET C# - 将圆形 SqlDataSource 放入方形 DataTable 孔中?

    asp.net - findcontrol 找不到动态添加的控件,该控件之前只是添加了一行

    javascript - 在剑道网格中显示条件图像

    c# - ASP.NET MVC 渲染 Model 时如何绑定(bind) jQuery 事件

    asp.net-mvc - 将异常传递到MVC 4中的自定义错误页面