2011-07-22 24 views
1

で期待どおりASP.NET MVC 3

public ActionResult Index(string category) { ... } 

...私は、オプションのカテゴリのパラメータを取りindexアクションでの掲載コントローラーを持って働いていないカスタムのルートでHtml.ActionLinkを呼び出すと、私は標準のデフォルトを持っていますGlobal.asaxのルート...

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

私が呼び出す場合...

ビュー内から
@Html.ActionLink("Show All Listings", "Index", "Listings") 

...(でもVIE w:指定されたカテゴリの同じアクション)私は "/ Listings"へのリンクを取得します。

私は...

@Html.ActionLink("Show Listings for Category A", "Index", "Listings", new { category = "CategoryA" }, null) 

を呼び出す場合...私は "/掲載?カテゴリ= CategoryA" へのリンクを取得します。これまでのすべての良い。

それでは、私が達成したかったことは、カテゴリを指定した場合のためのカスタムルートを作成することです。これを行うために、私は次のようにちょうど上記のルートの前にGlobal.asaxのためにカスタムルートを追加しました:私は...

@Html.ActionLink("Show Listings for Category A", "Index", "Listings", new { category = "CategoryA" }, null) 

を呼び出す場合

routes.MapRoute(
    "ListingCategories", 
    "listings/category/{category}", 
    new { controller = "Listings", action = "Index" } 
); 

は今...私は "素敵なリンクを取得します/ Listings/Category/CategoryA "

しかし、ここに問題があります。私は、カテゴリ=「CategoryA」と上記のアクション用のビューから... ...

@Html.ActionLink("Show All Listings", "Index", "Listings") 

を呼び出した場合、生成されたリンクは、「/掲載/カテゴリ/ CategoryAは、」/」だけではなく、のですリスト "。しかし、他のビューから同じ呼び出しを行うと、リンクは "/ Listings"としてうまく生成されます。

」=私は...呼び出し

@Html.ActionLink("Show All Listings", "Index", "Listings", new { category = "" }, null) 

を試してみた...とカテゴリを持っていたアクション用のビューから呼び出されたときに、それはまだ「/掲載/カテゴリ/ CategoryA」としてリンクを生成し、カテゴリA "とする。しかし、カテゴリを空でない文字列に設定すると、正しいカテゴリ(指定したもの)にリンクが生成されます。

これが期待どおりの動作ですか? categoryがあなたの前のルートがそのルートと一致しないActionLinkので、必要なカテゴリを作る代わりに、デフォルトのような別のルートと一致する

routes.MapRoute(
    "ListingCategories", 
    "listings/category/{category}", 
    new { controller = "Listings", action = "Index", category = UrlParameter.Optional } 
); 

オプションであるように、

答えて

1

はあなたのルートを変更します。

+0

はい、これに加えて、カテゴリが/ listing urlだけに指定されていない場合のルートを追加しました – Michael