【问题标题】:ASP.NET MVC WebForms RoutingASP.NET MVC WebForms 路由
【发布时间】:2016-01-06 19:34:51
【问题描述】:

据我所知,我们可以在 asp.net mvc 中使用 MapRoute 和 MapPageRoute 进行路由。我正在使用 MapRoute 进行路由,但效果不佳。如果我删除第一条路线,那么第二条路线运行良好,我希望同时使用它们。我在尝试做不可能的事吗?还是只是错过了谜题?

我的 Global.asax 文件:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
        name: "first",
        url: "{lang}/{controller}/{action}",
        defaults: new { lang= "en", controller = "", action = "" }
        );

routes.MapRoute(
        name: "category",
        url: "{lang}/{category}/{controller}/{action}",
        defaults: new { lang= "en", menu="", controller = "", action = "", category="" }
        );

在 *.aspx 文件中

NavigateUrl="<%$RouteUrl:controller=consulting, action=cars, category=service%>"

我的 URL 输出: en/consulting/cars?category=service
预期输出: en/service/consulting/cars

你有什么想法吗?

【问题讨论】:

  • 因为您的NavigateUrl 匹配第一条路线并停止搜索任何其他路线。交换订单。
  • 好的,那我还有一个问题。我们有 route: "{lang}/{controller}/{action}" 但我们有不同的 aspx 或 ascx 页面。我如何添加 {pagename} 以使用 NavigateUrl="" 路由,不同的页面位于不同的文件夹中。

标签: asp.net-mvc webforms asp.net-mvc-routing


【解决方案1】:

我创建了一个解决方案,但我不确定它是否是最好的方法:

RouteTable.Routes.MapPageRoute("default", "{lang}/{controller}/{action}/", "~/Views/{controller}/{action}.aspx", true,
        new RouteValueDictionary { { "lang", "en" }, { "controller", "default" }, { "action", UrlParameter.Optional } });

        RouteTable.Routes.MapPageRoute("services", "{lang}/services/{controller}/{action}/", "~/Views/services/{controller}/{action}.aspx", true,
        new RouteValueDictionary { { "lang", "en" }, { "controller", "consulting" }, { "action", "cars" }});

第二个 URL 将不会自动使用 NavigateUrl="" 但您现在知道 路径。所以,它应该可以工作:

NavigateUrl= "~/en/services/consulting/cars"

结果: http://yourwebsite.com/en/services/consulting/cars

【讨论】:

    猜你喜欢
    • 2012-03-19
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    相关资源
    最近更新 更多