带有多个参数one的c#url操作为null

本文关键字:c#url 操作 null one 参数 | 更新日期: 2023-09-27 18:03:27

我有一个jquery$.getJson调用,调用一个返回json的控制器操作。

动作接受3个参数:

public async Task<ActionResult> MyAction(string id, string name, string age)
{
    .... code here     
}

和JavaScript

$.getJson('@Url.Action("MyAction", "MyController", new { @id= Model.Id, @name=Model.Name, @age=Model.Age })')

问题是,在操作中,只有Id和Name值被提供age is null。年龄值是ther。如果我只是在页面上显示年龄

@模型。显示年龄

值。。。不知何故,没有设置为行动。

路线如下:

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

基本上只有前两个参数被发送到操作。第三个为空。我有一种感觉是一条路线的问题在这里,但无法弄清楚。

带有多个参数one的c#url操作为null

您正在向控制器发送一个JSON对象,为什么不发送3个参数呢?否则,你的控制器操作真的需要这样的东西来匹配你的请求:

public class DataClass{
   public string id;
   public string name;
   public string age;
}

更改控制器:

public async Task<ActionResult> MyAction(DataClass data)
{
   .... code here     
}

我实际上通过在RouteConfig.cs类中添加一个新路由来解决这个问题:

现在看起来是这样的。注意新的名称和年龄参数:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "UserRoute",
            url: "{
                     controller}/{action}/{id}/{name}/{age}",
                     defaults: new { 
                                    controller = "Home", 
                                    action = "Index", 
                                    id = UrlParameter.Optional, 
                                    name = UrlParameter.Optional, 
                                    age = UrlParameter.Optional }
        );
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { 
                             controller = "Home", 
                             action = "Index", 
                             id = UrlParameter.Optional }
        );
    }
}