asp.net-mvc - ASP.Net MVC3 路由问题

标签 asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing

我在一个交易网站上工作,并在 global.asax 中定义了以下路线。

routes.MapRoute(
    "AboutFooter",
    "about-bicker-shop",
    new { controller = "Footer", action = "About" }
);

routes.MapRoute(
    "ContactFooter",
    "contact-bickershop",
    new { controller = "Footer", action = "Contact" }
);

routes.MapRoute(
    "PrivacyPolicyFooter",
    "privacy-policy",
    new { controller = "Footer", action = "PrivacyPolicy" }
);

routes.MapRoute(
    "TermsAndConditionsFooter",
    "terms-and-conditions",
    new { controller = "Footer", action = "TermsAndConditions" }
);

routes.MapRoute(
    "SiteMapFooter",
    "sitemap",
    new { controller = "Footer", action = "SiteMap" }
);

routes.MapRoute(
    "FAQFooter",
    "faq",
    new { controller = "Footer", action = "FAQ" }
);

routes.MapRoute(
    "UnsubscribeFooter",
    "unsubscribe",
    new { controller = "Footer", action = "Unsubscribe" }
);

routes.MapRoute(
    "GetDealsByCity",
    "daily-bickers/{cityName}",
    new { controller = "Home", action = "Home" }
);

routes.MapRoute(
    "GetDealsbyCategory",
    "daily-bickers/{cityname}/{category}",
    new { controller = "Home", action = "GetDealsByCategory" }
);

routes.MapRoute(
    "GetDealDetails",
    "{cityName}/{dealName}",
    new { controller = "Home", action = "GetDealsByDealName" }
);

routes.MapRoute(
    "DealCheckout",
    "{cityName}/{dealName}/checkout",
    new { controller = "Home", action = "CheckoutDealByDealName" }
);

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

在我查看交易详细信息之前它工作正常,但是当我点击购买按钮购买交易时出现错误。

在进一步研究中,我发现在点击购买按钮时,代码会调用 GetDealsByDealName 操作,而不是 CheckoutDealByDealName 操作。请给我建议解决方案。

最佳答案

MVC 将始终提供它可以在路由表中找到的与请求的路由相匹配的第一条路由。在这种情况下,您获得错误路线的原因是因为它们都匹配 GetDealDetails 路线。即使第二条路线更具体,它也永远不会到达,因为 GetDealDetails 总是首先匹配。尝试像这样重新排序您的路线:

routes.MapRoute(
    "DealCheckout",
    "{cityName}/{dealName}/checkout",
    new { controller = "Home", action = "CheckoutDealByDealName" }
);

routes.MapRoute(
    "GetDealDetails",
    "{cityName}/{dealName}",
    new { controller = "Home", action = "GetDealsByDealName" }
);

这应该允许 details 路由与 checkout 路由不匹配,但 checkout 将在冲突期间首先被捕获。我真的建议你完全重命名你的路线,但看看你有什么我可以理解你为什么想要这些路线。

关于asp.net-mvc - ASP.Net MVC3 路由问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13075604/

相关文章:

asp.net-mvc - MVC 路由到子域

asp.net-mvc - 允许在 asp.net mvc 2 Controller 名称的 URL 中使用连字符

asp.net-mvc - asp.net mvc 路由 : how to use default action but non-default parameter?

java - 如何说服团队使用新技术(LinQ、MVC 等)?

asp.net-mvc - 关于将 Subsonic 与 Asp.Net MVC 框架一起使用有什么提示/技巧吗?

javascript - ASP.NET MVC 级联 DropDownLists Javascript 问题

ajax - 嵌套模型不绑定(bind)

c# - YouTube API登录用户缩略图C#

c# - 读取 JSON 对象

c# - C#入门,如何调试.NET 4.0 MVC3项目?