ASP.为什么ActionResult方法要求默认的控件参数

本文关键字:默认 控件 参数 为什么 ActionResult 方法 ASP | 更新日期: 2023-09-27 18:17:40

所以我有以下问题

我有一个viewactionresults方法:都位于一个控制器- TestController

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

我的全球。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 '的参数'pageNumber'的空条目。Int32' for method 'System.Web.Mvc.ActionResult Index(Int32, Int32, System.String)'

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

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

ASP.为什么ActionResult方法要求默认的控件参数

如果你的控制器被称为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"路由作为默认路由。

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

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