0

私のアプリケーションには 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 の制約を取り除くことですが、これは避けたいと思います。これを解決する方法について他の提案はありますか?

4

2 に答える 2

1

これは機能するはずです。あなたModel.Idは9より大きいので、1桁しか許されない制約に失敗しているのではないかと思います。したがって、複数の数字を許可して制約を調整してみてください。

routes.MapRoute(
    "CustomerActivity",
    "Customer/{id}",
    new { controller = "CustomerActivity", action = "DisplayDetails" },
    new { id = @"^\d+$" }
);
于 2012-09-18T16:23:04.977 に答える
0
Try this...It will work

routeCollection.MapRoute("CustomerActivity",
                         "{controller}/{action}/{id}",
                         new { controller = "CustomerActivity", action = "DisplayDetails" },
                         new { id = @"^\d$" });

routeCollection.MapRoute("CustomerSearch",
                         "CustomerSearch/DisplaySearch/{*pathInfo}",
                         new
                            {
                             controller = "CustomerSearch",
                             action = "DisplaySearch"
                            });
于 2012-09-18T18:16:40.910 に答える