Json Результат не работает, когда я использую db.Entry (x) .State = EntityState.Modified; - PullRequest
1 голос
/ 26 марта 2020

У меня есть представление, где я могу редактировать и добавлять новые строки в мой SQL, вызываемый AddOrEdit. Все, что мне нужно, это нажать кнопку Отправить после заполнения / изменения полей. Он вызывает мой ActionResult для AccountController , который приносит мне JsonResult, а моя AJAX функция при нажатии кнопки заставляет JsonResult заполнить сообщение Notify. js, чтобы сообщить, что отправка была успешно выполнена.

Проблема: Когда я создаю новую строку, все работает так, как должно быть, но когда я обновляю существующую строку, сообщение об успехе приходит в мой браузер как raw Json.

Контроллер:

[HttpPost]
        public ActionResult AddOrEdit(UserPortal user)
        {
            using (ModelEntities db = new ModelEntities())
            {

                try
                {

                    if (user.UserID == 0)
                    {
                        db.UserPortals.Add(user);
                    }

                    else
                    {
                        db.Entry(user).State = EntityState.Modified;
                    }

                    db.SaveChanges();
                    return Json(new { success = true, message = "Submitted Successfully. Redirecting..." }, JsonRequestBehavior.AllowGet);


                }

                catch (Exception ex)
                {
                    return Json(new { success = true, message = ex.Message }, JsonRequestBehavior.AllowGet);
                }
            }

        }

Просмотр:


@using (Html.BeginForm("AddOrEdit", "Account", FormMethod.Post, new { onsubmit = "return SubmitForm(this)" }))
{
<form id="AddOrEditUserForm">

                        @Html.HiddenFor(model => model.UserID)
                        <div class="form-group">
                            @Html.LabelFor(model => model.UserEmail, new { @class = "control-label" })
                            @Html.EditorFor(model => model.UserEmail, new { htmlAttributes = new { @class = "form-control" } })
                            @Html.ValidationMessageFor(model => model.UserEmail)
                        </div>

                        <div class="form-group">
                            @Html.LabelFor(model => model.UserName, new { @class = "control-label" })
                            @Html.EditorFor(model => model.UserName, new { htmlAttributes = new { @class = "form-control" } })
                            @Html.ValidationMessageFor(model => model.UserName)
                        </div>

                        <div class="form-group">
                            @Html.LabelFor(model => model.UserCompany, new { @class = "control-label" })
                            @Html.EditorFor(model => model.UserCompany, new { htmlAttributes = new { @class = "form-control" } })
                            @Html.ValidationMessageFor(model => model.UserCompany)
                        </div>

                        <div class="form-group">
                            @Html.LabelFor(model => model.UserPosition, new { @class = "control-label" })
                            @Html.EditorFor(model => model.UserPosition, new { htmlAttributes = new { @class = "form-control" } })
                        </div>

                        <div class="form-group">
                            @Html.LabelFor(model => model.UserAccessLevel, new { @class = "control-label" })
                            @Html.EditorFor(model => model.UserAccessLevel, new { htmlAttributes = new { @class = "form-control" } })
                            @Html.ValidationMessageFor(model => model.UserAccessLevel)
                        </div>

                        <div class="form-group">
                            <input type="submit" name="Submit" value="Salvar" class="btn btn-primary" />
                        </div>
                    </form>
}

Javascript при просмотре:

function SubmitForm(form) {

                $.validator.unobtrusive.parse(form);

                if ($(form).valid()) {

                    $.ajax({
                        type: "POST",
                        url: form.action,
                        data: $(form).serialize(),
                        success: function (data) {

                            var delay = 2000; // time in milliseconds
                            if (data.success) {


                                $.notify(data.message, {
                                    globalPosition: "top center",
                                    className: "success",
                                })

                                setTimeout(function () {
                                    window.location.href = '@Url.Action("AdminUsers", "Account")'; //redirect to the main page after some seconds
                                }, delay);

                            }

                        },
                        error: function (jqXHR, textStatus, errorThrown) { errorFunction(); },
                    });

                }
                    return false;

            } 

Уведомлять. js работает, когда я добавляю нового пользователя: изображение 1 Когда я нажимаю кнопку подтверждения, чтобы обновить существующего пользователя изображение 2

Что я пробовал:

1- Я добавляю console.log в свою функцию отправки, и после if ($(form).valid()) я просто больше не получаю свой тест console.log. Я думаю, что проблема в функции и ajax внутри нее.

2- На контроллере я дал по одному JsonResult для каждой ситуации: для создания у меня было сообщение «Создано успешно», и оно работало, но на Приведенное ниже сообщение «Обновление прошло успешно». У меня возникла та же проблема: на моем экране была записана строка json, но она отлично работала при обновлении внутренней части запрашиваемой строки.

...