所以我有问题
我有一个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
要求使用其他方法的参数?
答案 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" }
);