MapPageRoute 破坏集成 MVC/WebForms 应用程序中的 ActionLink

2023-12-13

我有一个用 ASP.NET 4.0 开发的现有 Web 应用程序。我想向应用程序添加 MVC 功能,因此我按照 Scott Hanselman 的文章将 MVC 集成到应用程序中将 ASP.NET MVC 3 集成到现有升级的 ASP.NET 4 Web Forms 应用程序中。因为 MVC 路由是贪婪的,所以我将以下代码添加到 Global.asa 中,以便空 URL 将转到我的 Default.aspx:

routes.MapPageRoute("WebFormsDefault", "", "~/Default.aspx");

现在的问题是 ActionLink 和 RouteLink 的形成不正确。如果我尝试使用以下命令创建操作链接:

@Html.ActionLink("Item List Page", "List", "Item")

创建以下 URL:

"/SiteName/?action=List&controller=Item

我发现其他人的几个帖子也有同样的问题,但没有一个有任何答案。这只是一个错误吗?一般来说,将 MVC 集成到 WebForms 应用程序中是一个坏主意吗?或者有没有办法解决这个问题,以便在用户首次进入站点时显示我的 Default.aspx 页面,并且 ActionLinks 和 RouteLinks 可以正常工作?


虽然有点晚了,但我认为迟到总比不做好。我遇到了完全相同的问题,我通过将 MapPageRoute 代码和 MapRoute 代码分组,然后始终首先调用 MapRoute 代码来解决它。例子:

最初我的路由看起来像这样 -

routes.MapPageRoute("401", "401/", "~/Views/Error/401.aspx");
routes.MapPageRoute("404", "404/", "~/Views/Error/404.aspx");
routes.MapPageRoute("500", "500/", "~/Views/Error/500.aspx");
routes.MapRoute(
            "Default",
            "{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = "" }
            );

etc etc

这导致我的所有表单操作都定向到格式如下的 url: /mysite/401?action=x&controller=y

显然这没有用。通过确保我始终首先设置所有 MVC 路由,问题自行解决。我最终制作了两种单独的方法,一种用于配置 MVC 路由,另一种用于配置 Webform 路由,如下所示:

RouteConfig.RegisterMvcRoutes(RouteTable.Routes);  // contains only MapRoute
RouteConfig.RegisterWFRoutes(RouteTable.Routes);  // contains only MapPageRoute

(这些调用照常进入 Global.asax 文件并替换 RouteConfig.RegisterRoutes)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MapPageRoute 破坏集成 MVC/WebForms 应用程序中的 ActionLink 的相关文章

随机推荐