【问题标题】:MVC model is null when posting json in ASP.Net Core在 ASP.Net Core 中发布 json 时,MVC 模型为空
【发布时间】:2017-02-17 12:03:45
【问题描述】:

所有相关代码:

//JSON data
var dataType = 'application/json; charset=utf-8';
var data = {
    FirstName: 'Andrew',
    LastName: 'Lock',
    Age: 31
}

console.log('Submitting form...');
$.ajax({
    type: 'POST',
    url: '/Diary/Save',
    dataType: 'json',
    contentType: dataType,
    data: data,
    success: function (result) {
        console.log('Data received: ');
        console.log(result);
    }
});


[HttpPost]
public IActionResult Save([FromBody] Person person)
{
    return Json(person);
}



public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}

Save 方法中的“person”始终为空。这应该可以工作...感觉可能是设置问题?我需要在此处进行更改吗:

 services.AddMvc(options =>
        {
        });

【问题讨论】:

  • 我在 Ajax 方法中执行此操作.. data: JSON.stringify(dataType),然后在控制器操作中我取出 [FromBody]
  • 我认为你必须在 .net 核心中做一些其他的事情才能让它在没有 [FromBody] 的情况下工作(不过我已经尝试过你的建议,仍然都是空值)
  • 您正在向/Diary/Index 发帖,但该函数名为Save。这只是此处帖子中的错误还是您正在运行此特定代码?
  • 发帖出错抱歉,谢谢
  • 你为什么写contentType: dataType?你不能像那样引用它上面的属性。

标签: jquery asp.net ajax asp.net-core asp.net-core-mvc


【解决方案1】:

您需要对发送到服务器的数据进行字符串化以将其转换为 JSON,因为这是您指定的内容类型标头:

data: JSON.stringify(data)

【讨论】:

  • 到底是什么鬼?!我花了几个小时在这个循环的各种组合上 - 我之前添加了 JSON.stringify,但它没有用......所以你做了什么?来吧,承认,你来过这里吗?
【解决方案2】:


请尝试此解决方案:
在 Jquery 文件中:

var data = {firstname : 'ali', lastname: 'alavi', age: 31};
var formData = new FormData();
formData.append('data',JSON.stringify(data));

$.ajax({
        type: "POST",        
        url: controllerUrl, //something like ~/[ControllerName]/[ActionName]
        data: formData,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        processData: false,
        contentType: false,
        success: function (data) {
            if (data.success)
                // ...
            else
                // ...
        },
        error: function () {
            // log error ...
        }
    });

然后在你的控制器中尝试:

using Newtonsoft.Json;
.
.
.
 [HttpPost]
 public JsonResult CreateServicesPost(string data)
 {
     var personModel = new PersonModel();
     personModel = JsonConvert.DeserializeObject<PersonModel>(data);
      // ...
 }


你的 Perso 模型是:

public class CreateServicePostModel
{
        public string Firstname{ get; set; }
        public string Lastname { get; set; }
        public int Age { get; set; }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多