Почему передается параметр с Ajax в контроллер в ASP. NET Ядро всегда NULL? - PullRequest
1 голос
/ 23 февраля 2020

Работает, но переданный параметр всегда равен нулю, этот код работает на моем другом проекте на 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);
    }

Ответы [ 3 ]

1 голос
/ 23 февраля 2020

Данные не отправляются в правильном формате, чтобы содержимое правильно связывалось с действием

Сначала правильно составьте полезную нагрузку для публикации

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

0 голосов
/ 23 февраля 2020

только что отправил без объекта

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) {

    }
});
0 голосов
/ 23 февраля 2020

Добавить FromBodyAttribute к параметру

MyFunction ([FromBody] строка namex)

...