У меня есть представление, где я могу редактировать и добавлять новые строки в мой 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, но она отлично работала при обновлении внутренней части запрашиваемой строки.