2012-02-13 4 views
0

../Search/Recipes/Deserts/PieのようにURLを入力すると、そのページにリダイレクトされます(SearchController、actionメソッド。私は私のGlobal.asaxの中にルートを追加しまし同じことを達成するために、次のようになります:パラメータをクエリ文字列として渡すのではなく、MVC3でカスタムURLを生成する方法

routes.MapRoute(
      "SearchRecipes",            
      "Search/Recipes/{category}/{type}",       
      new { controller = "Search", action = "Recipes", category = "all" , type = ""} 
); 

しかし、どのを通じてそのURLを生成するには&パラメータは砂漠&パイだろうレシピ

NBだろう私のコード?Url.Actionにルート値を追加しようとすると、クエリ文字列として来る。

たとえば

Url.Action("Recipes" , "Search" , new { type = item.type, isPie = item.isPie})

は私のように見えるリンク与えるだろう:Search/Recipes?type=Deserts&isPie=Y

を私はSearch/Recipes/Deserts/YのようなURLを生成したいです。

同じことをどのように達成できるのか教えてください。

基本的には、パラメータをクエリ文字列として渡したいのではなく、\ separated valuesに従いたいと思っています。

+0

この新しいルートを使用することができます最後のルートとまったく同じように見えますが、パラメータは異なります。ルーティングエンジンは、どうやってそれらを区別する必要がありますか? –

+0

それとも、この行動が既存のルートと一致しないのはなぜですか? –

+0

@ 32bitkid:基本的に私のパラメータをクエリ文字列として渡したいのではなく、\ separate値に従いたいと思っています。 – Biki

答えて

1

ルートを定義する際に指定されていない任意のクエリパラメータとして追加されます

routes.MapRoute(
     "SearchRecipes",            
     "Search/Recipes/{category}/{type}/{isPie}",       
     new { controller = "Search", action = "Recipes", category = "all" , type = "", isPie="N"} 
); 
@Url.RouteUrl("SearchRecipes",new{category=item.Category,type=item.type,isPie=itme.isPie}) 

を試してみてください!PARAM =値

+0

私のURLの値として "/"が得られました。つまり、URL url = @ Url.RouteUrl( "SearchRecipes"、新しい{category = item.Category、type = item.type、isPie = itme.isPie})です。 – Biki

+0

あなたのルート定義を投稿できますか? – MikeSW

+0

私のルートの定義はroutes.MapRoute( "myRoute"、 "{コントローラ}/{アクション}/{名前}/{年齢}/{住所}/{ジップ}/{オプト}")です。 新しい { コントローラ= "DummyAddress" = "GetStuff" = "ホーム"、 アクション、 年齢= 0、 住所、郵便番号= 0 、 名= "デル"、 OPT = UrlParameter.Optional } )。 – Biki

0

あなたはUrlHelper.RouteUrl方法

Url.RouteUrl("SearchRecipes", new {category = item.category, type=item.type}); 
関連する問題