将ASP.Net MVC与WebForms相结合

是否有可能创build一个MVC根应用程序(带有主页和主题的门户),并添加一对基于WebForms的子项目(我们已经有一个现有的WebForms应用程序,我们想要集成到门户网站中)?

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

像这里描述的解决scheme似乎有些过时

4 Solutions collect form web for “将ASP.Net MVC与WebForms相结合”

将Web表单与MVC相结合是完全可能的。 请参阅Scott Hanselman的博客文章以获取相关介绍。

  • 共享母版页: 看到这个StackOverflow的问题
  • 路由:在ASP.Net 4.0中, 已经为web表单页面路由启用了路由(scottgu的博客)

作为参考,我昨天完成了这个任务 – 将MVCfunction添加到现有的WebForms网站,也就是说,我认为我会写,以防任何人使用它。

人们会说:“最好的方法就是把你的网页表单应用程序改写成MVC”,但是当应用程序已经build立起来,并且随着时间的推移,这个应用程序经常会变成一个怪物)。 在我的例子中,我们被要求在这个应用程序中实现一个新的function – 最近在MVC上开发了其他项目 – 我想在MVC中构build这个新function。 这就是我所做的:

  1. 创build一个新的ASP.NET MVC 4应用程序,并select空模板 (使用剃刀)

  2. 一旦加载,右键单击“ 参考” >“浏览”,然后导航到我现有网站的Bin文件夹。 然后我添加在我在现有的网站使用的DLL。 作为参考,我正在使用AjaxControlToolkit,所以决定从NuGet中添加最新的一个。 这应该会自动更新web.config文件

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

  4. 安装完成后,我从Windows资源pipe理器的相应顶层文件夹中复制子文件夹和文件,并将其粘贴到解决scheme中。 如果你这样做,该项目允许您直接复制子文件夹和内容,通过Visual Studio添加现有项目只复制文件,从而节省时间。 请注意:对于根文件夹,我没有复制web.configGlobal.asax ,但复制在所有其他文件(如default.aspx等)

  5. 一旦所有的内容被复制,我打开web.config在新项目和web.config在现有的网站。 我复制到新的web.config任何特定于现有的网站(appSettings,connectionStrings,命名空间,会员信息等)。 这同样适用于Global.asax文件。

  6. 我试图build立和修复我错过的任何东西。

  7. 一旦一切正常(我已经击落了一些黄色的死亡屏幕),我注意到,我加载default.aspx时,我没有find页面错误。 这是路由,这是我对路由信息(位于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分钟左右,我起身跑步…好好坐着,编码:)

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

在这种情况下,我太困难了,毕竟我有一个解决scheme,首先将web.config复制到视图文件夹中。

打开Route.config(Routeconfig)文件之后,您会发现一个方法RegisterRoutes ,保持原样并创build另一个名为RegisterRoutes2()方法,并从mvc应用程序中复制粘贴以下方法代码:

 public static void RegisterRoutes2(RouteCollection routes) {...} 

在某些情况下,mvc应用程序中的方法名称是RegisterRoutes。 如果上面的代码不起作用,请将其从机器的mvc应用程序复制粘贴。 然后,转到global.asax文件,您会发现RegisterRoutes()已被调用,现在简单,也调用RegisterRoutes2() 。 你完成了,重新启动你的应用程序,或清理构build,它会运行。

  • 我怎样才能使整个HTML表单“只读”? 请仅服务器端
  • 什么是您的下一个ASP.NET项目的select:Web窗体或MVC?
  • testingwebforms应用程序的最佳方式是什么(ASP.NET)
  • 如何防止用户点击两次button?
  • 创build一个HTML表格,其中每个TR是一个FORM
  • 表单提交后如何做一个jQuery的callback?
  • Asp.Net Web窗体和Asp.Net网页
  • LINQ:使用Lambdaexpression式获取CheckBoxList的所有选定值
  • 样式<input type =“file”>
  • 如何在asp.net Web窗体上实现Ninject或DI?
  • 从客户端(*)检测到潜在危险的Request.Path值