我试图让这条路线在我的MVC3应用程序中工作但操作方法总是如此 获取null参数。
一般的想法是我的路线有一个强制参数“类别”和一个可选参数“城市”。可能的请求URL如下所示:
/Map/SelectCategory/Restaurants
/Map/SelectCategory/Restaurants/Washington
此路由旨在返回JSON数据,因为它将用作Web服务,这与我在此之后为常规定义的标准/ Map / Category操作相反 网页,工作正常。
所以,我的路线在Global.asax中定义如下:
routes.MapRoute( // Map It! Controller
"MapSvc", // route name
"Map/SelectCategory/{catID}/{city}", // URL with parameters
new { controller = "Map", action = "SelectCategory", city= UrlParameter.Optional }
);
.. Here a route for /Map/Category/{id} ..
.. Here a route for /Map/Placemark/{id} ..
据我所知,我可以在路由定义中省略'catID',因为它自动绑定为非可选,对吧?通过定义但同样的结果来尝试。
最后但同样重要的是,我在Controller中的操作定义如下:
public ActionResult SelectCategory(string catID, string city)
{
IEnumerable<Models.Placemark> list;
if (!string.IsNullOrEmpty(city)) {
list = doThis();
} else {
list = doThat();
}
return Json(list);
}
现在我在操作的第一个语句上放置了一个断点但是当我按照路径(/ Map / SelectCategory / Restaurants)中的说明请求URL时,我看到类别和城市参数都是NULL,在这种情况下我期望category参数为“Restaurants”。
解决方案 注意:因为我没有100点声望,所以我必须等待6个小时才能发布答案,我真的必须这样做。
谢谢 @tsegay让我朝着正确的方向前进。 Global.asax中定义的所有其他路由都有带参数的显式URL,但问题是由于默认路由(在空解决方案模板中创建的标准路由)对于这种情况太贪婪而引起的:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional}
);
我在Global.asax的路由列表的末尾移动它,现在问题就消失了!非常感谢你让我朝着正确的方向前进。