Ajax获取MVC5控制器的参数

Ajax获取MVC5控制器的参数,ajax,asp.net-mvc,Ajax,Asp.net Mvc,我想知道为什么我的ajax调用我的Controller在调用我的参数id时有效,而在调用accountNo或accountId时无效 AJAX 控制器 在我的控制器中-如果参数为int-id,则一切正常 如果我将Controller参数更改为,比如说,accountNum,我会收到一个500错误,说明我的参数为null 因此,实际上,控制器参数的命名决定了我的GET请求是否成功。是因为它是JSON编码的,并且我没有在我的ajax方法中指定数据模型/格式吗 如果对此有答案,我很抱歉,因为我没有

我想知道为什么我的
ajax
调用我的
Controller
在调用我的参数
id
时有效,而在调用
accountNo
accountId
时无效

AJAX 控制器 在我的
控制器中
-如果参数为
int-id
,则一切正常

如果我将
Controller
参数更改为,比如说,
accountNum
,我会收到一个500错误,说明我的参数为
null

因此,实际上,控制器参数的命名决定了我的
GET
请求是否成功。是因为它是JSON编码的,并且我没有在我的
ajax
方法中指定数据模型/格式吗


如果对此有答案,我很抱歉,因为我没有找到它。

这是因为默认情况下
RouteConfig.cs
将路由的第三个组件定义为变量
id

您可以通过指定URL访问该控制器

/DeferredAccount/GetDeferredAccountDetailsByAccount/?accountNum=1

使用属性路由 还有另一种更细粒度的方法可以使用MVC5为您的路由服务,称为属性路由

编辑
RouteConfig.cs

添加
routes.mapmvcattributterroutes()

编辑控制器

[Route("/whatever/path/i/like/{accountNum:int}")]
public JsonResult GetDeferredAccountDetailsByAccount(int accountNum)
{
    [...]
}

这是因为默认情况下,
RouteConfig.cs
将路由的第三个组件定义为变量
id

您可以通过指定URL访问该控制器

/DeferredAccount/GetDeferredAccountDetailsByAccount/?accountNum=1

使用属性路由 还有另一种更细粒度的方法可以使用MVC5为您的路由服务,称为属性路由

编辑
RouteConfig.cs

添加
routes.mapmvcattributterroutes()

编辑控制器

[Route("/whatever/path/i/like/{accountNum:int}")]
public JsonResult GetDeferredAccountDetailsByAccount(int accountNum)
{
    [...]
}

您可以在RouteConfig.cs文件中将下面的Route放在上面

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "DeferredAccount", action = "GetDeferredAccountDetailsByAccount", id = UrlParameter.Optional }
);

您可以在RouteConfig.cs文件中将下面的路线放在顶部

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "DeferredAccount", action = "GetDeferredAccountDetailsByAccount", id = UrlParameter.Optional }
);

愚蠢的问题,但既然你在这里:我不需要在每个控制器方法上都使用Route Attr,是吗?RTM;)-“您还可以将属性路由与基于约定的路由相结合。”。谢谢-现在就知道了。谢谢你!愚蠢的问题,但既然你在这里:我不需要在每个控制器方法上都使用Route Attr,是吗?RTM;)-“您还可以将属性路由与基于约定的路由相结合。”。谢谢-现在就知道了。谢谢你!