Как передать ответ AJAX (true / false) из контроллера с помощью ASP .NET CORE - PullRequest
0 голосов
/ 20 ноября 2018

Я хочу получить ответ от моего основного контроллера ASP.NET через AJAX.Вот пример моего кода

public IActionResult Submit(ViewModel model) {
    var isValid = true;
    if (isValid) {
        return Json(new {
            success = true
        });
    }
    return Json(new {
        success = false
    });
}

CSHTML-часть

<form asp-action="Submit" asp-controller="Home" id="formSubmit" name="formSubmit" method="post" enctype="multipart/form-data">
    <input type="text" id="Name" name="Name">
    <input type="text" id="Address" name="Address">
    <input type="text" id="JobDescription" name="JobDescription">
</form>
$("#formSubmit").on('submit', function(e) {
  var datas = {
    Name: $("input[name='Name']").val(),
    Address: $("input[name='Address']").val(),
    JobDescription: $("input[name='JobDescription']").val()
  };
  var formAction = $(this).attr("action");
  $.ajax({
    method: "POST",
    url: formAction,
    data: JSON.stringify(datas),
    dataType: "json",
    contentType: 'application/json',
    success: function(response) {
      if (response.success) {
        alert("Test");
        return true;
      } else {
        alert("Invalid/Error");
        e.preventDefault();
      }
    });
  });

Проблема в этом коде заключается в перенаправлении / загрузке на страницу, отображающую {"success":false}.

Моя ViewModel

public class ViewModel{
    public string Name { get; set; }
    public string Address { get; set; }
    public string JobDescription { get; set; }
}

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Использовали ли вы атрибут [HttpPost] в действии Отправить?Вам необходимо установить определенный URL-адрес, например "/ Home / Submit", и указать ссылку на jquery.

Действие:

[HttpPost]
    [Consumes("application/json")]
    [Produces("application/json")]
    public IActionResult Submit(ViewModel model)
    {
        var isValid = true;
        if (isValid)
        {
            return Json(new
            {
                success = true
            });
        }
        return Json(new
        {
            success = false
        });
    }

Просмотр:

<form id="formSubmit" name="formSubmit" method="post" enctype="multipart/form-data">
<input type="text" id="Name" name="Name">
<input type="text" id="Address" name="Address">
<input type="text" id="JobDescription" name="JobDescription">
<input type="submit" value="Create" class="btn btn-default" />
</form>

@section Scripts{
<script src="~/lib/jquery/dist/jquery.js"></script>
<script>
    $("#formSubmit").on('submit', function (e) {
        var datas = {
            Name: $("input[name='Name']").val(),
            Address: $("input[name='Address']").val(),
            JobDescription: $("input[name='JobDescription']").val()
        };
        e.preventDefault();
        //var formAction = $(this).attr("action");
        $.ajax({
            method: "POST",
            url: "/Home/Submit",
            data: JSON.stringify(datas),
            dataType: "json",
            contentType: 'application/json',
            success: function (response) {
                if (response.success) {
                    alert("Test");
                    return true;
                } else {
                    alert("Invalid/Error");
                   // e.preventDefault();
                }
            }
        });
    });
</script>
}
0 голосов
/ 20 ноября 2018

похоже, здесь есть несколько проблем

<form asp-action="Submit" asp-controller="Home" id="formSubmit" name="formSubmit" method="post" enctype="multipart/form-data">

Вы указываете asp-action и asp-controller.Опустить все эти свойства.Начните с:

<form>...</form>

Причина в том, что когда вы устанавливаете эти атрибуты, он использует механизм отправки формы старой школы, который перенаправляет (одна из сторон влияет на вас в списке).

Такжетип имени кажется несоответствующим, вы используете ViewModel, но в вашем примере имя типа TFAViewModel

Попробуйте следующее, над контроллером (для каждого метода) или над самим методом добавьте

[Consumes("application/json")]
[Produces("application/json")]
public IActionResult Submit([FromBody]ViewModel model)
{
  ModelState.IsValid; //use to inspect. You will also see any violations
  ....

}

В своем коде JS убедитесь, что вы делаете следующее (как было прокомментировано)

e.preventDefault(); //stops redirect
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...