【问题标题】:AJAX paramter to ASP .NET Core 2 Controller ActionASP .NET Core 2 控制器操作的 AJAX 参数
【发布时间】:2018-04-18 21:42:16
【问题描述】:

我想将 AJAX 参数传递给 ASP .Net Core 2 中的 MVC 控制器。

这是我尝试过的:

function getMatchesFromChampionshipAsync(championship) {
    console.log(championship);
    $.ajax({
        url: "/Bets/Matches",
        type: "POST",
        data: { "championship": championship },
        dataType: 'json',
        contentType: 'application/json; charset=UTF-8',
        success: function (response) {
            alert(response)
        }
    })
}

我确定参数championship是正确的(我也试过记录它),但控制器总是收到null
这是控制器操作方法代码:

[HttpPost]
    public IActionResult Matches([FromBody] string championship) {
        return Json(championship);
    }

浏览器还会提醒null。 我还阅读了有关它的其他问题,但没有人工作。

【问题讨论】:

  • 了解 .net core 2 中的模型绑定
  • 如果您只是将对象作为数据传递而不将其包装在另一个对象中,它将起作用
  • Simple post to Web Api的可能重复
  • @TheBeardedLlama 我试过了,没用。

标签: c# asp.net ajax asp.net-core-2.0


【解决方案1】:

我解决了使用一个名为Championship 的单一属性的类:

public  class Value {
        public String Championship { get; set; }
}

并将其用作 Action 方法中的模型:

[HttpPost]
public IActionResult Matches([FromBody] Value ch) {
    return Json(ch.Championship);
}

不知道有没有更简单的方法。

【讨论】:

    【解决方案2】:

    最近,我非常喜欢在 javascript 中使用 formData 对象从 xhr/ajax 传递数据以发布到 MVC 操作。这是一个例子:

        var nameFormDataHere = new FormData();
        nameFormDataHere.append("championship", championship);
        $.ajax({
        url: "/Bets/Matches",
        type: "POST",
        data: nameFormDataHere,
        dataType: "json"
        processData: false,
        contentType: false,
        success: function (response) {
            alert(response);
        }
    });
    

    就像上面的示例一样,您需要创建一个具有属性的模型(类),并在 ajax 发布到的操作上方添加数据注释 [HttpPost],并将新模型(类)作为参数放入那个行动。这是来自您上面的示例:

    型号:

        public  class Value{
            public String Championship { get; set; }
        }
    

    行动:

        [HttpPost]
        public IActionResult Matches(Value ch) {
            return Json(ch.Championship);
        }
    

    我已经用过几次了,从来没有使用过 [FromBody] 注释。

    【讨论】:

      【解决方案3】:

      尝试删除 ajax 语句中的“contentType”限定符,或者简单地将参数包装在 JSON.stringify 中,即。数据:JSON.stringify(冠军)。

      【讨论】:

        【解决方案4】:

        尝试添加 traditional: true

        function getMatchesFromChampionshipAsync(championship) {
        console.log(championship);
        $.ajax({
            url: "/Bets/Matches",
            type: "POST",
            data: { "championship": championship },
            traditional: true,
            dataType: 'json',
            contentType: 'application/json; charset=UTF-8',
            success: function (response) {
                alert(response)
            }
        })}
        

        【讨论】:

        • 仍然为空,在我得到的输出中:Chance3> Executing action method Chance3.Controllers.BetsController.Matches (Chance3) with arguments () - ModelState is Invalid
        • 能把 contentType 和 dataType 行注释掉试试看吗?
        • 我只能评论dataType,但没有任何改变
        • 如果您想保持内容类型为 application/json ,请尝试将您的数据更改为 - data: JSON.stringify({ "championship": Champion })
        猜你喜欢
        • 1970-01-01
        • 2021-03-30
        • 2022-07-27
        • 2018-10-27
        • 2022-08-17
        • 2020-11-19
        • 2019-08-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多