. Net Core 3.0 AJAX POST Тело всегда пустое - PullRequest
1 голос
/ 07 февраля 2020

Я недавно преобразовал свой проект из. Net Framework 4.7 в. Net Core 3.0. У меня возникают проблемы при получении моего AJAX сообщения на работу.

Вот что работает. Net Framework 4.7:

Просмотр:

@using (Ajax.BeginForm("Save", "Controller", new AjaxOptions() { HttpMethod = "Post", OnSuccess = "OnSaveSuccess", OnFailure = "OnFailure" }, new { Model }))
{
  ... Model Code Here
}

Контроллер:

[HttpPost]
public JsonResult Save(Contract contract)

Вот что не работает. Net Core 3.0:

Вид:

<form method="post" action="/Controller/Save" data-ajax="true" data-ajax-method="post" data-ajax-sucess="OnSaveSuccess"  data-ajax-failure="OnFailure">

Контроллер:

[HttpPost]
public JsonResult Save([FromBody] Contract contract)

Объект Контракта имеет значение NULL в этом запросе. Что-то я делаю не так?

Спасибо

Ответы [ 2 ]

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

Вы можете обратиться к следующему примеру для выполнения ajax отправки с использованием jQuery Ненавязчивого AJAX.

<form method="post" action="/Home/Save" data-ajax="true" data-ajax-method="post" data-ajax-success="OnSaveSuccess" data-ajax-failure="OnFailure">
    <div class="form-group row">
        <label asp-for="Name" class="col-sm-3 col-form-label"></label>
        <div class="col-sm-7">
            <input asp-for="Name" class="form-control">
        </div>
    </div>
    <div class="form-group row">
        <label asp-for="Email" class="col-sm-3 col-form-label"></label>
        <div class="col-sm-7">
            <input asp-for="Email" class="form-control">
        </div>
    </div>
    <div class="form-group row">
        <div class="col-sm-7 offset-sm-3">
            <button class="btn btn-primary" id="submit">Submit</button>
        </div>
    </div>
</form>

получения и ссылки jquery - ajax -unobtrusive

@section scripts{
    <script src="~/lib/jquery-ajax-unobtrusive/dist/jquery.unobtrusive-ajax.js"></script>
    <script>
        function OnSaveSuccess(res) {
            console.log(res);
            alert('Success');
        }

        function OnFailure() {
             alert('failed');
        }
    </script>
}

Класс контракта

public class Contract
{
    public string Name { get; set; }
    public string Email { get; set; }
}

Действие контроллера (с атрибутом [FromForm])

[HttpPost]
public JsonResult Save([FromForm] Contract contract)
{
    // code logic here
}

Результат теста

enter image description here

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

Это закончилось моей ошибкой. Я положил:

$.ajaxSetup({
   contentType: "application/json"
});

Это заставляло POST отображаться неправильно. Как только я удалил его, модель подошла правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...