Как использовать связыватель модели в .net core mvc с Ajax Post? - PullRequest
0 голосов
/ 13 января 2019

Я новичок в .net core MVC и пытаюсь выполнить запись Ajax, аналогичную .net framework MVC. Я просто пытаюсь ОСТАНОВИТЬ одно значение типа int для действия контроллера ниже. Вызов Ajax попадает в контроллер, но параметр action всегда равен 0. Я проверил, что в полезной нагрузке Ajax-запроса отправляется правильное целочисленное значение. Чего мне не хватает?

public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public IActionResult Ajax_GenerateSecretNum([FromBody]int lower)
    {

        return Json(new { success = true });
    }

  $.ajax({
            url: '@Url.Action("Ajax_GenerateSecretNum", "Home")',
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            data: { lower: lower },
            success: function (response) {

            }
        });

Ответы [ 2 ]

0 голосов
/ 14 января 2019
            $.ajax({
                url: '@Url.Action("Ajax_GenerateSecretNum", "Home")',
                type: 'POST',               
                data: { "lower": lower, "upper": upper },
                success: function (response) {

                }   
            });

Изменение моего jQuery ajax на приведенный выше пример решило проблему. Я не уверен, почему, но похоже, что указание дополнительных параметров AJAX привело к сбою привязки модели. После изменения ajax я также смог удалить атрибут [FromBody] из действия контроллера.

0 голосов
/ 14 января 2019

Вы можете создать модель (DTO) для параметра контроллера и использовать JSON.stringify() в своих данных перед отправкой в ​​контроллер.

 $.ajax({
    url: '@Url.Action("Ajax_GenerateSecretNum", "Home")',
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    data: JSON.stringify({ lower: lower }),
    success: function (response) {

    }
});

public class ModelDto
{
    public int Lower { get; set; }
}

[HttpPost]
public IActionResult Ajax_GenerateSecretNum([FromBody]ModelDto model)
{
    // model.Lower should contain your int
    return Json(new { success = true });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...