Asp.net mvc 将ASP.NETMVC与WebForms相结合

Asp.net mvc 将ASP.NETMVC与WebForms相结合,asp.net-mvc,webforms,master-pages,sharing,Asp.net Mvc,Webforms,Master Pages,Sharing,是否可以创建一个MVC根应用程序(具有母版页和主题的门户)并添加两个基于WebForms的子项目(我们已经有了一个现有的WebForms应用程序,希望集成到门户中) 您将如何集中导航(站点地图、url路由)? 您将如何共享母版页? 如何引用资源(~问题等)?将web表单与MVC相结合是完全可能的。请参阅以获取介绍 共享母版页: 路由:在ASP.Net 4.0中 上面的答案很好。你可以考虑的另一件事是从ASP.NET迁移到ASP.NET MVC,在这种情况下迁移项目文件。< P>参考我昨天完成了

是否可以创建一个MVC根应用程序(具有母版页和主题的门户)并添加两个基于WebForms的子项目(我们已经有了一个现有的WebForms应用程序,希望集成到门户中)

您将如何集中导航(站点地图、url路由)?
您将如何共享母版页?

如何引用资源(~问题等)?

将web表单与MVC相结合是完全可能的。请参阅以获取介绍

  • 共享母版页:
  • 路由:在ASP.Net 4.0中

上面的答案很好。你可以考虑的另一件事是从ASP.NET迁移到ASP.NET MVC,在这种情况下迁移项目文件。

< P>参考我昨天完成了这项任务——将MVC功能添加到一个现有的WebFrand网站,那就是我想我会写下它对任何人有用。 人们说:“最好的方法是将您的web表单应用程序重写为MVC”,但当应用程序已建立良好,并且随着时间的推移已发展成为一个相当庞大的应用程序(我可能会补充说,这仍然很有效)时,通常不存在这样的商业案例。在我的例子中,我们被要求在这个应用程序中实现一个新功能——最近在其他项目中使用MVC进行开发——我想在MVC中构建这个新功能。这就是我所做的:

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

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

  • 然后,我打开Windows资源管理器,导航到我现有网站的根文件夹。然后,我使用Visual Studio复制了现有站点的顶级文件夹结构(减去Bin文件夹),导致两个站点具有相同的顶级文件夹(但新项目也具有MVC应用程序启动、控制器、模型和视图文件夹,但没有Bin文件夹)

  • 安装完成后,我从Windows资源管理器中相应的顶级文件夹中复制了子文件夹和文件,并将它们粘贴到解决方案中。如果您这样做,项目允许您直接复制子文件夹和内容,通过VisualStudio添加现有项仅复制文件,从而节省时间。请注意:对于根文件夹,我没有在web.configGlobal.asax中复制而复制了所有其他文件(如default.aspx等)

  • 复制完所有内容后,我在新项目中打开了web.config,在现有站点中打开了web.config。我将任何特定于现有网站的内容(应用设置、连接字符串、名称空间、成员信息等)复制到新的web.config中。这同样适用于Global.asax文件

  • 我尝试了一次构建并修复了我错过的任何东西

  • 一旦一切正常(我击落了一些死亡的黄色屏幕),我注意到在加载default.aspx时,我发现页面未找到错误。这取决于路由,以下是我对路由信息所做的更改(位于Global.ascx MVC 3或App_Start>RouteConfig.cs MVC 4中):


  • 采取了所有这些步骤后,站点像往常一样加载和运行,但我现在有了ASP.NETWebForms和MVC的混合版本。我相信可能有更简单的方法来完成这项任务,但我尝试了其他方法,但失败了。这条路花了我大约20分钟的时间,我开始跑步。。。很好的sat和编码:)

    在这种情况下,我太迟钝了,毕竟我得到了一个有效的解决方案,首先在你的视图文件夹中复制
    web.config

    打开
    Route.config(Routeconfig)
    文件后,您将在其中找到一个方法
    RegisterRoutes
    ,保持原样并创建另一个名为
    RegisterRoutes2()
    ,然后从mvc应用程序复制粘贴以下方法代码:

    public static void RegisterRoutes2(RouteCollection routes)
    {...}
    
    在某些情况下,mvc应用程序中的方法名称将是RegisterRoutes。 如果上述代码不起作用,请从计算机的mvc应用程序复制粘贴它。 然后,转到
    global.asax
    文件,您会发现调用了
    registeroutes()
    ,现在很简单,也可以调用
    registeroutes2()

    完成后,重新启动应用程序,或清理构建,它将运行。

    很棒的帖子,我在做同样的事情时使用的所有链接。这很快,很有帮助;容易的。我还能够使用标准的adddialog向MVC项目添加更多的webform页面。如果我想既添加旧的webform页面,又添加MVC Razor页面,这是必须的。
    public static void RegisterRoutes2(RouteCollection routes)
    {...}