私のアプリケーションには 2 つのルートが設定されています。
routeCollection.MapRoute("CustomerActivity",
"Customer/{id}",
new { controller = "CustomerActivity", action = "DisplayDetails" },
new { id = @"^\d$" });
routeCollection.MapRoute("CustomerSearch",
"Customer/{*pathInfo}",
new
{
controller = "CustomerSearch",
action = "DisplaySearch"
});
着信 URL は、正しいコントローラー/アクションのペアに正しくルーティングされます。ただし、ビューでは、顧客の詳細を表示するためにアンカーを生成する必要があります。
@Html.ActionLink(Model.Name, "DisplayDetails", "CustomerActivity", new { id = Model.Id }, null)
これの問題は、実際にはどのルートも選択しないことです。これは、CustomerActivity ルートの制約によるものだと思います。
私もRouteLink
あまり運がなくても使ってみました:
@Html.RouteLink(Model.Name, "CustomerActivity", new { id = Model.Id })
CustomerActivity の制約を取り除くことはできません。これが、すべてがそのルートに陥るのを防ぐためです。
最後に制約なしで CustomerActivity のコピーを追加すると問題が解決するようですが、私はあまり感銘を受けません:
routeCollection.MapRoute("CustomerActivity",
"Customer/{id}",
new { controller = "CustomerActivity", action = "DisplayDetails" },
new { id = @"^\d$" });
routeCollection.MapRoute("CustomerSearch",
"Customer/{*pathInfo}",
new
{
controller = "CustomerSearch",
action = "DisplaySearch"
});
routeCollection.MapRoute("CustomerActivityUrlCreation",
"Customer/{id}",
new { controller = "CustomerActivity", action = "DisplayDetails" });
他に考えられる唯一のことは、URL を根本的に区別して CustomerActivity の制約を取り除くことですが、これは避けたいと思います。これを解決する方法について他の提案はありますか?