将ASP.Net MVC与WebForms结合使用

Zyp*_*rax 43 asp.net-mvc webforms master-pages sharing

是否有可能创建一个MVC根应用程序(具有主页和主题的Portal)并添加几个基于WebForms的子项目(我们已经有一个现有的WebForms应用程序,我们想要集成到Portal中)?

您将如何集中导航(站点地图,网址路由)?
你会如何分享这些主页?
您如何参考资源(〜问题等)?

这里描述的那样的解决方案似乎有些过时了

jer*_*enh 42

将Web表单与MVC结合是完全可能的.请参阅Scott Hanselman撰写的这篇博客文章.

  • 很棒的帖子,我做同一件事时使用的所有链接。 (2认同)

Mat*_*att 26

作为参考,我昨天设法完成了这项任务 - 将MVC功能添加到现有的WebForms网站,即 - 我认为如果它对任何人都有用,我会写.

人们说:"最好的方法是将你的网络表单应用程序重写为MVC"但是当应用程序已经建立并且随着时间的推移逐渐成长为一个怪物时,通常没有商业案例(这仍然很好我可能会添加).在我的例子中,我们被要求在这个应用程序中实现一个新函数 - 并且最近在其他项目中开发了MVC - 我想在MVC中构建这个新函数.这就是我做的:

  1. 创建一个新的ASP.NET MVC 4应用程序并选择空模板(使用Razor)

  2. 加载后,右键单击引用 >浏览,然后导航到我现有网站的Bin文件夹.然后我添加了我在现有网站中使用的DLL.作为参考,我使用AjaxControlToolkit,因此决定添加NuGet中的最新版本.然后应该自动更新web.config文件

  3. 然后我打开了Windows资源管理器并导航到我现有网站的根文件夹.然后使用Visual Studio,我复制了现有站点的顶级文件夹结构(减去Bin文件夹),导致2个站点具有相同的顶级文件夹(但新项目具有MVC App_Start,控制器,模型和视图文件夹也,但明显不是Bin).

  4. 设置完成后,我从Windows资源管理器中的相应顶级文件夹中复制了子文件夹和文件,并将它们粘贴到解决方案中.如果你这样做,项目允许你直接复制子文件夹和内容,通过visual studio添加现有项目只复制文件,从而节省时间.请注意:根文件夹,我不是在复制web.config文件Global.asax中,但在所有其他文件复制(如Default.aspx的,等等)

  5. 复制完所有内容后,我在新项目中打开了web.config,在现有站点中打开了web.config.我将新的web.config复制到现有网站的任何特定内容(appSettings,connectionStrings,名称空间,成员资格信息等).这同样适用于Global.asax文件.

  6. 我尝试了构建并修复了我错过的任何内容.

  7. 一切都是正确的(我已经击落了几个黄色的死亡屏幕)我注意到我在加载default.aspx时得到了页面未找到错误.这取决于路由,这是我对路由信息所做的更改(位于Global.ascx MVC 3或App_Start> RouteConfig.cs MVC 4中):

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
        // This informs MVC Routing Engine to send any requests for .aspx page to the WebForms engine
        routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
        routes.IgnoreRoute("{resource}.aspx");
    
        // Important change here: removed 'controller = "Home"' from defaults. This is the key for loading
        // root default page. With default setting removed '/' is NOT matched, so default.aspx will load instead
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { action = "Index", id = UrlParameter.Optional }
        );
    }
    
    Run Code Online (Sandbox Code Playgroud)

通过所有这些步骤,网站加载并像往常一样运行,但我现在有一个ASP.NET WebForms和MVC混合.我确信可能有更简单的方法来完成这项任务,但我尝试了其他方法并失败了.这种方式花了我大约20分钟,我开始运行...很好坐和编码:)


Odd*_*Odd 5

上面的答案很棒.您可以考虑的另一件事是从ASP.NET迁移到ASP.NET MVC,在这种情况下,这篇文章可能会帮助您迁移项目文件.