ASP.NET,MVC - 为什么ActionResult方法要求默认控制参数

时间:2016-11-14 04:54:33

标签: c# asp.net-mvc

所以我有问题

我有一个ActionResults方法的视图: 两者都位于一个控制器中 - TestController

public override ActionResult Index(int pageNumber, int pageSize, string nothing)
{
    ...
}

public ActionResult getAJAX()
{
    ...
}

我的global.asax文件:

routes.MapRoute(
    "getAJAX", 
    "{controller}/getAJAX", 
    new { action = "getAJAX" } 
);

routes.MapRoute(
    "Test", 
    "{controller}/{action}/{id}", 
    new { controller = "Test", action = "Index", id = UrlParameter.Optional, pageNumber = 1, pageSize = 50 } 
);

如果我打开site.com/TestController/getAJAX - 我收到以下错误

  

参数字典包含参数' pageNumber'的空条目。非可空类型的System.Int32' for method' System.Web.Mvc.ActionResult Index(Int32,Int32,System.String)'

如果打开site.com/TestController/getAJAX/1 - 一切正常

为什么getAJAX要求使用其他方法的参数?

2 个答案:

答案 0 :(得分:0)

如果您的控制器被调用TestController,那么您需要使用Test的所有网址(即Controller应该从网址中删除),例如,使用{{1而不是site.com/Test/getAJAX

当你尝试导航到site.com/TestController/getAJAX时,MVC正在寻找一个名为site.com/TestController/getAJAX的类,因为它不在那里,所以使用了第二条路线而不是第一条路线。

此外,您在默认路由对象中不需要TestControllerController,因此不是

Controller

你应该使用

new { controller = "TestController", action = "Index", id = UrlParameter.Optional, pageNumber = 1, pageSize = 50 } 

答案 1 :(得分:0)

在错误消息中看到行System.Web.Mvc.ActionResult Index(Int32, Int32, System.String)

它指向Index(...)操作而不是getAJAX()操作。

根据global.asax文件中的MapRoute,getAJAX适用于"site.com/Test/getAjax"

并且"site.com/getAJAX"已与"TestController"路由匹配为默认路由。

解决方案: 将getAJAX的MapRoute更改为

 routes.MapRoute(
    "getAJAX", 
    "getAJAX", 
    new { controller="Test", action = "getAJAX" } 
);
相关问题