2012-02-17 2 views
13

/News/5のルートをニュースコントローラにマップする方法を特定しようとしています。/News/5のルートをニュースコントローラにマップする方法

これは私のNewsControllerです:

public class NewsController : BaseController 
{ 
    // 
    // GET: /News 

    public ActionResult Index(int id) 
    { 
     return View(); 
    } 

} 

これは私のGlobal.asax.csルールです:

 routes.MapRoute(
      "News", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "News", action = "Index", id = -1 } // Parameter defaults 
     ); 

私は/ニュース/ 5に移動しようが、私は、エラーが見つかりませんリソースを受け取りますしかし、/ニュース/インデックス/ 5に行くときには動作しますか?

私はちょうど{controller}/{id}を試しましたが、それはちょうど同じ問題を作りました。

ありがとうございます!

+2

'{コントローラ}/{id} 'あなたはデフォルトで行動を続けましたか? 'new {controller =" News "、action =" Index "、id = -1}' – Lazarus

答えて

18

あなたの{controller}/{id}のルートは正しいものの、他のルートの後にそれを登録しておくことをお勧めします。ルートリストでは、それがトップダウンで検索され、最初に見つかったマッチが勝ちます。

ステアリングのルーティングを助けるために、私はコントローラが存在し、#2の{id}が番号であることを保証するために、このためのルート制約を作成することをお勧めします。

は主にthis article

参照してください:

routes.MapRoute( 
     "Index Action", // Route name 
     "{controller}/{id}", // URL with parameters EDIT: forgot starting " 
     new { controller = "News", action = "Index" }, 
     new {id= @"\d+" } 
    ); 
+0

ありがとう、私はあなたのメッセージを8分間受け入れることができません。 'new {controller =" News "、id = @" 0 | - ?[1-9] \ d * "} //制約をルートし、それを他のマップルートの上に移動する – ElveMagicMike

6

あなたの新しいルートはそうのように、自分のデフォルトルートの前にあることを確認する必要があります:あなたがしようとしたとき

routes.MapRoute(
     "NewsAbbr", // Route name 
     "{controller}/{id}", // URL with parameters 
     new { controller = "News", action = "Index", id = -1 } // Parameter defaults 
    ); 


    routes.MapRoute(
     "News", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "News", action = "Index", id = -1 } // Parameter defaults 
    ); 
関連する問題