MVC控制器GET操作应该使用参数

时间:2011-01-31 21:45:29

标签: asp.net-mvc

我正在考虑简化我的MVC控制器操作。

有关所有GET操作是否应使用RouteData.Values而不是参数获取其值的任何想法?

1 个答案:

答案 0 :(得分:3)

如果正确设置路线,则无需使用RoutaData.Values,默认模型绑定器会为您执行此操作。看看global.asax的默认路由:

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

所以你可以创建一个这样的动作:

 public ActionResult SomeAction(int id) {
   // in case of url '/MyController/SomeAction/1' id == 1
 }

你根本不需要使用RoutaData.Values,你只需要正确设置你的路线。为什么你想在地球上使用这样的东西:(?!)

 public ActionResult SomeAction() {
   int id;
   if(int.TryParse(RoutaData.Values["id"] + "", out id))
   {
     // ...
   }
 }

反对这种“模式”的其他论据:

  • 复杂的单元测试 控制器类/操作
  • 规避模型结合阶段 (Ryan指出)
  • 规避模型验证阶段