首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MVC Asp.Net控制器将原始JSON返回到新窗口

MVC Asp.Net控制器将原始JSON返回到新窗口
EN

Stack Overflow用户
提问于 2017-11-21 19:24:36
回答 2查看 1K关注 0票数 2

就像我的标题说的那样,我遇到了一个问题,就是我的MVC Controller在一个新窗口中返回JsonResult,而不返回到ajax成功事件。

我还试图通过Ajax从Controller获取数据,或者将contenttype更改为类似于"application/ Json“的内容,但是我总是使用原始的Json数据获得一个新窗口。在我看来,问题必须与控制器有关,否则javascript无法捕获json数据。

这也不是浏览器特有的问题,我在每个普通浏览器中都有这样的问题。

有什么我错过的吗还是很奇怪?

控制器:

代码语言:javascript
复制
    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);
    }

Ajax:

代码语言:javascript
复制
$(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:

代码语言:javascript
复制
@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>

请救救我!

塞巴斯蒂安

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-21 20:13:12

您在浏览器中获取JSON响应,因为您的代码不是在执行ajax post,而是在执行正常的表单提交。

为什么不执行ajax提交?

因为您没有任何代码要求这样做。您正在将submit事件绑定到错误的元素。您应该将其绑定到表单,而不是按钮。

代码语言:javascript
复制
$('#ChangeUserInformation').on("submit", function (event) {
     event.preventDefault();
   // do your ajax call
});

现在,当用户单击另一个按钮时,它将调用表单上的submit事件,并调用上述提交事件处理程序,并进行ajax调用。

票数 1
EN

Stack Overflow用户

发布于 2017-11-21 19:34:42

我认为问题在于您使用的是ajax调用的表单Submit。

将javascript代码更改为以下代码以删除提交行为:

代码语言:javascript
复制
$('#save-user-alert').click(function () {

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");
    }
 });
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47421082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档