Сообщение Ajax передает null контроллеру - PullRequest
2 голосов
/ 20 июня 2019

Я делаю запрос AJAX POST к контроллеру MVC, но данные поступают как null. Я не уверен почему.

$(document).ready(function() {
  $("#btnSaveCustomer").click(function() {
    debugger; 
    var data = {
      _DcLink: "1",
      _Account: "Test",
      _Name: "TestName",
      _Title: "Mr",   
      _Init: "T"
    }

    $.ajax({
      method: "POST",
      url: '/Customer/SaveCustomer',
      data: JSON.stringify(data),
      success: function() {
        debugger;
        console.log(data)
        alert("Success")
      },
      error: function() {
        alert("Error")
      }
    });
})
public ActionResult SaveCustomer(string data)
{
  using (var ms = new MemoryStream(Encoding.UTF32.GetBytes(data)))
  {
    // Deserialization from JSON  
    DataContractJsonSerializer deserializer = new DataContractJsonSerializer(typeof(Customer));
    Customer serializeddata = (Customer)deserializer.ReadObject(ms);
  }
  return Json(new { Success = true });
}

Независимо от того, как я пытаюсь сериализовать данные, это всегда null. Я считаю, что метод AJAX POST не выполняется должным образом

Я использую фиктивные данные для решения проблемы.

Код достигает точки останова в MemoryStream в контроллере - данные null.

System.ArgumentNullException: 'Ссылка на строку не установлена ​​для экземпляра строки. Имя параметра: s '

Любая помощь приветствуется

Ответы [ 3 ]

3 голосов
/ 20 июня 2019

Это потому, что ModelBinder ожидает свойство в JSON с именем data, но вы его не отправляете; все свойства находятся в корневом объекте. Это бы хорошо работало, если бы вы были привязаны к модели, но поскольку вам это не нужно, вам нужно немного изменить структуру данных в вашем JS:

var data = { 
  data: {
    _DcLink: "1",
    _Account: "Test",
    _Name: "TestName",
    _Title: "Mr",   
    _Init: "T"
  }
}
1 голос
/ 20 июня 2019

изменить, как это;

data: {data : JSON.stringify(data)},
0 голосов
/ 20 июня 2019
$(document).ready(function() {
  $("#btnSaveCustomer").click(function() {
    debugger;
    var data = {
      _DcLink: "1",
      _Account: "Test",
      _Name: "TestName",
      _Title: "Mr",
      _Init: "T"
    }

    $.ajax({
      method: "POST",
      url: '/Customer/SaveCustomer',
      data: JSON.stringify(data),
      success: function(data) {
        debugger;
        console.log(data)
        alert("Success")
      },
      error: function() {
        alert("Error")
      }
    });
  })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...