2011-11-29 6 views
5

私は規則を使用するために私のURLを希望:私のルートでは、ASP MVC3を使用してURLの途中でオプションのパラメータを使用する方法はありますか?

/{controller}/{id}/{action} 

ではなく

/{controller}/{action}/{id} 

私は次のようにルートを設定してみました:

routes.MapRoute(
      "Campaign", 
      "{controller}/{action}/{id}", 
      new { controller = "Campaign", action = "Index", id = UrlParameter.Optional } 
     ); 
しかし、これは動作しません。 idパラメータをオプションにすることができないためです。

次のURL

を働いています:

/campaign/1234/dashboard 
/campaign/1234/edit 
/campaign/1234/delete 

しかし、これらのURL はない行います

/campaign/create 
/campaign/indexempty 

MVCはちょうど両方のためのIndex呼び出します。私は間違って何をしていますか?

答えて

7

おそらく2つの別個のルートが必要になると思います。

routes.MapRoute(
      "CampaignDetail", 
      "{controller}/{id}/{action}", 
      new { controller = "Campaign", action = "Index" } 
     ); 

routes.MapRoute(
      "Campaign", 
      "{controller}/{action}", 
      new { controller = "Campaign", action = "Index" } 
     ); 
+0

これは機能しました。あなたのコードを少し修正 - 私は最初のルート "CampaignDetail"は、2番目のルートと競合しないように命名した。 – parleer

+0

ああ、私はそれを逃した。私はそれが助けてうれしいです。 –

+0

もう一つ、 '{controller}/{id}/{action} 'が私のデフォルトルートを妨害していました。私は、私のURLに** campaign **という言葉を明示的に使ってこれを修正することができました。すなわち 'キャンペーン/ {id}/{行動} 'です。 – parleer

関連する問題