为什么ActionResult方法要求默认的控制参数

所以我有问题

我有一个视图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 - 我收到以下错误

参数字典包含对于方法'System.Web.Mvc.ActionResult索引(Int32,Int32,System.String)'的非空值类型'System.Int32'的参数'pageNumber'的空项。

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

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


如果您的控制器被称为TestController ,那么您的URL中的任何地方都需要使用Test (例如,应将Controller从URL中删除),例如,使用site.com/Test/getAJAX而不是site.com/TestController/getAJAX

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

另外,你不需要Controller的默认路由对象,所以不用

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

你应该使用

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

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

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

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

"site.com/getAJAX"与默认路由"TestController"路由相匹配。

解决方案:将MapRoute更改为getAJAX

 routes.MapRoute(
    "getAJAX", 
    "getAJAX", 
    new { controller="Test", action = "getAJAX" } 
);
链接地址: http://www.djcxy.com/p/39211.html

上一篇: why ActionResult method asking for default control parameters

下一篇: Pass values of checkBox to controller action in asp.net mvc4