Отправка модели в контроллер с использованием вызова Ajax и возврат единственной переменной для отображения сообщения об успешном завершении на экране - PullRequest
0 голосов
/ 21 сентября 2018

Я могу передать модель своему контроллеру с помощью AJAX-вызова, но я не получаю желаемого результата.

Контроллер:

public async Task<ActionResult> UpdateUserDetails([Bind(Exclude = "Password, ReportPassword")]AdminViewModel model)
{
  (.... Code that does not need to be displayed ....)

   return Json(new { status = "success"}, JsonRequestBehavior.AllowGet);
}

. AJAX-вызов:

.
    $("#submitUserDetails").submit(function (e) {
        var userId = $("#Id").val();
        var FirstName = $("#FirstName").val();
        var LastName = $("#LastName").val();
        var ResetUserPassword = $("#ResetUserPassword").val();
        var Email = $("#Email").val();
        var selectedRole = $("input:radio[name='RolesSelectedOnView']:checked").val();

        var Model =
        {
            "Id": userId,
            "FirstName": FirstName,
            "LastName": LastName,
            "ResetUserPassword": ResetUserPassword,
            "Email": Email,
            "rolesSelectedOnView": selectedRole
        };

        $.ajax({
            url: '@Url.Action("UpdateUserDetails", "Admin")',
            data: JSON.stringify(Model),
            type: 'POST',
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: function (data) {
                if (data.status === "success") {
                    $.smallBox({
                        title: "<strong>Challenge Deleted</strong>",
                        content: "<i class='fa fa-clock-o'></i> <i>Challenge was successfully deleted! <strong>You will now be redirected back to the My Challenges page</strong></i>",
                        color: "#659265",
                        iconSmall: "fa fa-check fa-2x fadeInRight animated",
                        timeout: 4000
                    });

                }

            }
        });

    });

Итак, я хочу, чтобы тот же экран оставался открытым, но просто хочу, чтобы «SmallBox» отображал сообщение, вместо этого я получаю пустой экран, только с этим:

{"status": "success"}

URL-адрес также содержит всю информацию о модели, которую я также не хочу.

Я даже попытался опубликовать следующееформа для контроллера (которая также работает), но я получаю точно такой же результат!

    $("#submitUserDetails").submit(function (e) {
        var form = $(this);
        var url = form.attr("UpdateUserDetails", "Admin");  

        $.ajax({
            type: "POST",
            url: url,
            data: JSON.stringify(form.serialize()), // serializes the form's elements.
            dataType: "json",
            contentType: "application/json; charset-utf-8",
            success: function (data) {

                    //alert(data); // show response from the php script.
                    $.smallBox({
                        title: "<strong>User Details Saved</strong>",
                        content: "<i class='fa fa-clock-o'></i> <i> <strong></strong></i>",
                        color: "#659265",
                        iconSmall: "fa fa-check fa-2x fadeInRight animated",
                        timeout: 4000
                    });
            }
        });

        e.preventDefault(); // avoid to execute the actual submit of the form.
    });

Все, что я хочу сделать, это отправить данные, позволить контроллеру сделать то, что он должен, а затем просто всплывающее окносообщение, что оно было успешно сохранено.Что я делаю не так?

РЕДАКТИРОВАТЬ

Что-то, что можно упомянуть, что может помочь - Это запускается из частичного просмотра

1 Ответ

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

Если вы используете кнопку с type = "submit", я думаю, вам нужно return false в вашем обработчике событий, чтобы предотвратить нормальное поведение.

EDIT: (на основе чата)

Обработчик событий не привязывается к кнопке, поскольку частичное представление, содержащее кнопку, отображается после начальной загрузки страницы.Решение состоит в том, чтобы переместить код обработчика событий в частичное представление.

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