3

私はディール Web サイトに取り組んでおり、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。解決策を教えてください。

4

1 に答える 1

2

MVC は常に、要求されたルートに一致するルーティング テーブルで見つけることができる最初のルートを提供します。この場合、間違ったルートを取得する理由は、両方がGetDealDetailsルートに一致するためです。GetDealDetails2 番目のルートはより具体的ですが、常に最初に一致するため、到達することはありません。次のようにルートを並べ替えてみてください。

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

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

これにより、詳細ルートがチェックアウト ルートと一致しないようにする必要がありますが、衝突時にチェックアウトが最初に捕捉されます。ルートの名前を完全に変更することを強くお勧めしますが、あなたが持っているものを見ると、なぜこれらのルートが必要なのか理解できます.

于 2012-10-25T19:46:25.750 に答える