1

我试图让这条路线在我的 MVC3 应用程序中工作,但操作方法总是获取空参数。

一般的想法是我的路线有一个强制参数“类别”和一个可选参数“城市”。可能的请求 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 中的 Action 定义如下:

 public ActionResult SelectCategory(string catID, string city)
 {
     IEnumerable<Models.Placemark> list;
     if (!string.IsNullOrEmpty(city)) {
        list = doThis();
     } else {
        list = doThat();
     }
     return Json(list);
 }

现在我在操作的第一个语句上放置了一个断点,但是当我请求路由中所述的 URL (/Map/SelectCategory/Restaurants) 时,我看到类别和城市参数都是 NULL,在这种情况下,我期望类别参数为“餐厅”。

解决方案 注意:因为我没有 100 点声望,所以我必须等待 6 个小时才能发布答案,我真的要走了,所以就在这里。

感谢@tsegay 让我朝着正确的方向前进。Global.asax 中定义的所有其他路由都具有带参数的显式 URL,但问题是因为默认路由(在空解决方案模板中创建的标准路由)对于这种情况来说过于贪婪:

 routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional}
 );

我将它移到 Global.asax 中路线列表的末尾,现在问题消失了!非常感谢你让我朝着正确的方向前进。

4

0 回答 0