ASP .NET Core 2 控制器操作的 AJAX 参数

Posted

技术标签:

【中文标题】ASP .NET Core 2 控制器操作的 AJAX 参数【英文标题】:AJAX paramter to ASP .NET Core 2 Controller Action 【发布时间】: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 我试过了,没用。 【参考方案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 )

以上是关于ASP .NET Core 2 控制器操作的 AJAX 参数的主要内容,如果未能解决你的问题,请参考以下文章

[十] ASP.NET Core MVC 中的路由

目录ASP.NET Core 2.1 入门教程

如何在 Asp.Net Core 的控制器操作和区域中限制参数类型

从 ASP.NET Core 中的控制器操作运行后台任务

如何在 ASP.NET Core MVC 中读取操作方法的属性?

如何更改 ASP.NET Core API 中的默认控制器和操作?