1

私はいくつかのカスタムルートをうまく動かそうとしています。自動車アプリ用に 2 つのページがあります。最初のページには車両のリストが表示されます。ユーザーがこのページで生成されたリンクをクリックすると、製品リスト ページに移動します。問題は、このページがリンクを適切に生成しないことです。

ルートは次のとおりです。

            routes.MapRoute(
                "Select_Vehicle",
                "Select_Vehicle/{id}/{make}",
                new { controller = "Select_Vehicle", action = "Index", id = UrlParameter.Optional, make = UrlParameter.Optional });

            routes.MapRoute(
                "Products",
                "Products/{id}/{make}/{model}",
                new { controller = "Products", action = "Index", id = UrlParameter.Optional, make = UrlParameter.Optional, model = UrlParameter.Optional });

            routes.MapRoute(
                "Default",
                "{controller}/{action}/{id}",
                new { controller = "Home", action = "Index", id = UrlParameter.Optional });

Select_Vehicle ページは、次のようなリンクを生成する必要があります。

/products/horns/dodge/dakota

しかし、私が得るのはこれです:

/Products/Index/horns?make=dodge&model=Dakota

正しく動作しません。また、「インデックス」がデフォルトであるため、なぜ「インデックス」も表示されるのかわかりません。

私はActionLinkとRouteLinkの両方を試しました:

@Html.RouteLink(model, new { Controller = "Products", id = Model.CategoryName, make = Model.CurrentMake, model = model })
@Html.ActionLink(model, "Index", "Products", new { id = Model.CategoryName, make = Model.CurrentMake, model = model }, null)

これは私を夢中にさせています。

4

3 に答える 3

2

ASP.NET MVC は、単一のオプション パラメーターのみをサポートします。ルートを更新して、make と model をオプションにするのではなく、デフォルトにします。RouteLink正しいルートを選択するために、ルート名を取るオーバーロード on を使用する必要がある場合もあります。

@Html.RouteLink(model, "Products", new 
 {
     id = Model.CategoryName,
     make = Model.CurrentMake,
     model = model
 })
于 2012-12-10T01:09:03.847 に答える
0

さて、私は問題を理解しました。複数の UrlParameter.Optional を持つことができますが、問題があります。これは、Microsoft がどのように位置付けたいかによって、バグまたは機能になります。

問題は、make が空だったため、URL を作成するときに問題が発生したことです。詳細については、次を参照してください。

http://haacked.com/archive/2011/02/20/routing-regression-with-two-consecutive-optional-url-parameters.aspx

すべての提案と助けに感謝します。

于 2012-12-13T02:18:13.450 に答える
0

コードが機能するはずです。私はあなたのルートを新しいプロジェクトでテストしました。これが私が得たものです。ルート構成に他に何かありますか?

http://localhost:60599/Products/horns/dodge/dakota

私はasp.net MVC 3を使用しています

于 2012-12-10T11:08:50.190 に答える