2010-10-08 99 views
3

我已經得到了默認路由:不能綁定到參數

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

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

我有一個控制器:NewsController。它有一個方法,像這樣:

public ActionResult Index(int id) 
{ 
    ... 
} 

如果我瀏覽到/新聞/索引/ 123,它的工作原理。 /新聞/ 123作品。但是,/ News/Index?id = 123不會(它找不到任何名爲「index」的id允許爲空的方法)。所以我似乎對路由和模型綁定器如何協同工作缺乏一些瞭解。

問的原因是我想用不同的新聞來源,參數「id」有一個下拉菜單。所以我可以選擇一個新聞來源(例如「sport」,id = 123),它應該被路由到我的索引方法。但我似乎無法得到那個工作。

+3

也許你應該這樣做方法簽名:Index(int?id)? – Restuta 2010-10-08 06:56:16

+0

是的,我現在用if(!id.HasValue){id = int.Parse(Request.QueryString [「id」])解決它。 }但是我想明白爲什麼我需要這樣做。 – 2010-10-08 07:09:46

回答

1

ASP.NET MVC路由使用反射工作。它會在控制器內部查找與您在路由中定義的模式相匹配的方法。如果它找不到一個......那麼你看過會發生什麼。

所以答案是(如發表的評論)您id參數的類型更改爲Nullable<int>int?