是否可以创建MVC根应用程序(具有主页和主题的Portal)并添加几个基于WebForms的子项目(我们已经有一个现有的WebForms应用程序,我们想要集成到Portal中)?
您将如何集中导航(站点地图,网址路由)? 你会如何分享这些主页? 您如何参考资源(〜问题等)?
将Web表单与MVC结合是完全可能的。请参阅this blog post by Scott Hanselman的介绍。
作为参考,我昨天设法完成了这项任务 - 将MVC功能添加到现有的WebForms网站,即 - 我认为如果它对任何人都有用,我会写。
人们说:“最好的方法是将你的网络表单应用程序重写为MVC”但是当应用程序已经建立并且随着时间的推移逐渐成长为一个怪物时,通常没有商业案例(这仍然很好我可能会添加)。在我的例子中,我们被要求在这个应用程序中实现一个新函数 - 并且最近在其他项目中开发了MVC - 我想在MVC中构建这个新函数。这就是我做的:
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,在这种情况下this post might help you迁移项目文件。
我在这种情况下太过紧张,毕竟我得到了一个有效的解决方案,首先在你的views文件夹中复制web.config
。
在那之后打开Route.config(Routeconfig)
文件,你会找到一个方法RegisterRoutes
,保持原样并创建另一个名为RegisterRoutes2()
的方法,并从mvc应用程序复制粘贴以下方法代码:
public static void RegisterRoutes2(RouteCollection routes)
{...}
在某些情况下,mvc app中的方法名称是RegisterRoutes。如果上面的代码不起作用,请从机器的mvc应用程序中复制粘贴它。然后,去global.asax
文件,你会发现RegisterRoutes()
已被调用,现在简单,也称为RegisterRoutes2()
。您已完成,重新启动应用程序或清理构建,它将运行。