繁体   English   中英

为什么在 ASP.NET Core 中使用 Ajax 将参数传递给控制器​​始终为 NULL?

[英]Why passed param with Ajax to controller in ASP.NET Core is always NULL?

它有效,但传递的参数始终为空,此代码在 ASP.NET Framework(.Net Framework) 上的我的另一个项目上工作,但在 ASP.NET Core 中不起作用。

var inputParams = "{namex: '" + 'testdata' + "'}";

var xhr = $.ajax({
    url: "/Test/MyFunction",
    type: 'POST',
    dataType: 'json',
    data: inputParams,
    contentType: 'application/json; charset=utf-8',
    success: function (msg) {

    },
    error: function (xhr) {

    }
});

测试控制器包含:

   [HttpPost]
   public JsonResult MyFunction(string namex) <--- namex is always NULL
    {
        return Json(false);
    }

数据没有以正确的格式发送,内容无法正确绑定到操作

首先正确构建要发布的有效负载

var inputParams = { namex: "testdata" }; //<-- NOTE JavaScript

var xhr = $.ajax({
    url: "/Test/MyFunction",
    type: 'POST',
    dataType: 'json',
    data: JSON.stringify(inputParams), //<-- NOTE CONVERSION TO JSON
    contentType: 'application/json; charset=utf-8',
    success: function (msg) {

    },
    error: function (xhr) {

    }
});

接下来创建一个模型来保存服务器端的数据

public class MyModel {
    public string namex { get; set;}
}

最后重构动作以绑定到请求正文中的预期数据

[HttpPost]
public IActionResult MyFunction([FromBody]MyModel model) {
    if(ModelState.IsValid) {
        string namex = model.namex;
        return Ok();
    }
    return BadRequest(ModelState);
}

ASP.NET Core 中的参考模型绑定

将 FromBodyAttribute 添加到参数

MyFunction([FromBody] 字符串名称x)

没有对象就发送了

var inputParams = 'testdata';

var xhr = $.ajax({
    url: "/Test/MyFunction",
    type: 'POST',
    dataType: 'json',
    data: inputParams,
    contentType: 'application/json; charset=utf-8',
    success: function (msg) {

    },
    error: function (xhr) {

    }
});

或者



var xhr = $.ajax({
    url: "/Test/MyFunction?namex=testdata", // <------ here
    type: 'POST',
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    success: function (msg) {

    },
    error: function (xhr) {

    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM