将ASP.Net MVC与WebForms结合使用
是否可以创建一个MVC根应用程序(带有主页和主题的门户)并添加一对基于WebForms的子项目(我们已经有一个现有的WebForms应用程序,我们希望将其集成到门户网站)?将ASP.Net MVC与WebForms结合使用
你将如何集中导航(站点地图,网址路由)?
你会如何分享主页?
你会如何参考资源(〜问题等)?
解决方案,如一个described here似乎有些过时
结合网页表单MVC是完全可能的。简介见this blog post by Scott Hanselman。
- 共享母版页:see this * question
- 路由:在ASP.Net 4.0,routing has been enabled for web forms page routes (scottgu's blog)
作为参考,我昨天成功地完成了这项任务 - 将MVC功能添加到现有的WebForms网站,即 - 我认为如果它对任何人都有用处,我会写。人们说:“最好的方法是将你的web表单应用程序重写为MVC”,但当应用程序已经建立并且随着时间的推移已经成长为相当怪物的时候,通常没有商业案例。以及我可能会添加)。就我而言,我们被要求在这个应用程序中实现一个新的功能 - 并且最近在其他项目中一直在MVC中开发 - 我想在MVC中构建这个新功能。这是我做过什么:
创建一个新的ASP.NET MVC 4应用和选择的空模板(剃刀)
加载后,右键单击参考>浏览并导航至我现有网站的Bin文件夹。然后我添加了我在现有站点中使用的DLL。作为参考,我使用了AjaxControlToolkit,因此决定从NuGet中添加最新的一个。然后这应该自动更新web.config文件
然后我打开了Windows资源管理器并导航到我现有的网站的根文件夹。然后,我使用Visual Studio复制现有站点的*文件夹结构(减去Bin文件夹),从而导致2个站点具有相同的*文件夹(但具有MVC App_Start,控制器,模型的新项目和“视图”文件夹,但显然不是Bin)。
设置完成后,我从Windows资源管理器中的相应*文件夹复制子文件夹和文件,并将它们粘贴到解决方案中。如果你这样做,该项目允许您直接复制子文件夹和内容,通过Visual Studio添加现有项目只复制文件,从而节省时间。请注意:根文件夹,我确实不副本在web.config中或的Global.asax,但在所有其他文件复制(如Default.aspx的,等等)
一旦所有内容为复制后,我在现有站点的新项目和web.config中打开了web.config。我复制到新的web.config任何特定于现有网站(appSettings,connectionStrings,名称空间,成员信息等)。这同样适用于Global.asax文件。
我试图构建并修复了我错过的任何东西。
-
一旦一切是正确的(我曾经击落死亡数黄屏)我注意到,我得到了加载的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 } ); }
随着采取所有这些步骤,该网站像往常一样加载并运行,但我现在有一个ASP.NET WebForms和MVC混合。我确信有可能更简单的方法来完成这项任务,但我尝试了其他方法并失败。这种方式花了我大约20分钟,我已经起来跑步...好吧,坐下来,编码:)
我在这种情况太困难了,毕竟我得到了一个解决方案,首先复制web.config
在您的查看文件夹。
打开Route.config(Routeconfig)
文件后,在那里你会找到一个方法RegisterRoutes
,保持它,因为它是和创建一个名为RegisterRoutes2()
另一种方法,然后复制粘贴MVC应用以下方法代码:
public static void RegisterRoutes2(RouteCollection routes)
{...}
在某些情况下mvc应用程序中的方法名称将为RegisterRoutes。 如果上面的代码不起作用,请从机器的mvc应用程序复制粘贴。 然后,请转至global.asax
文件,您会发现RegisterRoutes()
已被调用,现在简单,也请拨打RegisterRoutes2()
。 完成后,重新启动应用程序或清理构建,它将运行。
好帖子,我在做同样的事情时使用的所有链接。 – Odd 2010-02-04 23:21:30