当我输入localhost / MyController / MyActionName / 1时,我在可选参数中得到null为什么?

时间:2012-01-05 22:05:27

标签: c# asp.net-mvc-3 asp.net-mvc-4

路线

 routes.MapRoute(
      "Whatever", // Route name
      "{controller}/{action}/{id}", //{ID} MUST BE USED IN YOUR CONTROLLER AS THE PARAMETER 
      new { controller = "MyController", action = "MyActionName", id = UrlParameter.Optional } // Parameter defaults
  );

就是这样!我猜你必须使用id中的id名称 public actionresult(int id //必须是这里的ID,如global.asax)

Steps to reproduce my problem: 
1. Create a new mvc3 application
2. Go to home controller and put Index(int? x){ return view()}
3. Run the application
4. Go to the url type in the url http://localthost:someport/Home/Index/1
5. Insert a break point in controller to see the value of x 
6. Notice that even if you put the url above x NOT equal to 1 as is suppose to!

我只是不明白为什么我在id中得到null ....

 public ActionResult MyActionName(int? id)
    {
       //the id is null!!!!!!!!!!!! event thought i just entered the url below!
    }

我在浏览器中输入以下网址 http://locahost/MyController/MyActionName/1

//我也把它放在我的global.asax中,但它并没有真正帮助。

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

和! 如果我把

我的错误
  public ActionResult MyActionName(int id)
        {
           //the id is null!!!!!!!!!!!! event thought i just entered the url below!
        }

请注意,上面的示例是为了简单起见,此错误适用于实际应用程序。

'/'应用程序中的服务器错误。

参数字典包含'MedicalVariance.Controllers.MedicineManagementController'中方法'System.Web.Mvc.ActionResult Index(Int32)'的非可空类型'System.Int32'的参数'MvrId'的空条目。可选参数必须是引用类型,可空类型,或者声明为可选参数。 参数名称:参数 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.ArgumentException:参数字典包含非医学类型'System.Int32'的参数'MvrId'的空条目,用于'MedicalVariance'中的方法'System.Web.Mvc.ActionResult Index(Int32)' .Controllers.MedicineManagementController”。可选参数必须是引用类型,可空类型,或者声明为可选参数。 参数名称:参数

1 个答案:

答案 0 :(得分:2)

确保您的路线在默认路线之前定义。