【发布时间】:2017-11-21 19:24:36
【问题描述】:
就像我的标题所说,我的 MVC 控制器总是在新窗口中返回 JsonResult 并且不将其返回给 ajax 成功事件。
我还尝试通过 Ajax 从控制器获取数据或将内容类型更改为“application/json”之类的内容,但我总是会得到一个包含原始 Json 数据的新窗口。在我看来,问题必须与控制器有关,否则 javascript 无法捕获 json 数据。
这也不是特定于浏览器的问题,我在每个常见的浏览器中都有这个问题。
有什么我想念的还是很奇怪?
控制器:
public JsonResult Update(ChangeUserInformationViewModel model)
{
var user = UserManager.FindById(User.Identity.GetUserId());
user = model.User;
UserManager.Update(user);
return Json(new { success = true }, JsonRequestBehavior.AllowGet);
}
阿贾克斯:
$(document).ready(function () {
$('#save-user-alert').click(function () {
$("#ChangeUserInformation").submit();
});
$('#save-user-alert').on("submit", function (event) {
event.preventDefault();
var url = $(this).attr("action");
var formData = $(this).serialize();
$.ajax({
type: "POST",
url: url,
data: formData,
contentType: "json",
success: function (resp) {
if (resp.success) {
swal("Goo Job!", "Yippii", "success");
};
},
error: function (resp) {
swal("Failes", "Upps.. something went wrong", "danger");
}
});
});
});
HTML:
@using (Html.BeginForm("Update", "User", FormMethod.Post, new { id = "ChangeUserInformation" }))
{
<div class="form-group">
<label for="Username">Username</label>
@Html.TextBoxFor(x => x.User.UserName, new { @class = "form-control", value = Model.User.UserName, id = "Username" })
</div>
<div class="form-group">
<label for="FirstName">First Name</label>
@Html.TextBoxFor(x => x.User.Firstname, new { @class = "form-control", value = Model.User.Firstname, id = "FirstName" })
</div>
<div class="form-group">
<label for="LastName">Last Name</label>
@Html.TextBoxFor(x => x.User.LastName, new { @class = "form-control", value = Model.User.LastName, id = "LastName" })
</div>
}
<button class="btn btn-danger waves-effect waves-light btn-sm" id="save-user-alert">Click me</button>
请帮帮我!
塞巴斯蒂安
【问题讨论】:
-
按钮
#save-user-alert不会生成提交事件(表单#ChangeUserInformation会)——因此事件处理程序不会做任何事情。而且由于您正在发出 ajax 请求,因此您不想这样做.submit()。
标签: javascript asp.net json ajax asp.net-mvc