2010-10-08 104 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?