Json结果提示下载

时间:2014-06-13 15:41:22

标签: javascript jquery ajax asp.net-mvc json

我正在实施一个简单的CRUD操作。我有表中显示的数据列表,具有添加编辑和删除功能。在Jquery对话框中添加编辑和删除操作

当我尝试添加新记录时,我将Json结果返回为Success True / false,具体取决于表单数据条目。

这是我的代码

    [HttpPost]
    public ActionResult AddUser(AddCEQRUser addUserInfo)
    {            
        // perform insert operation

        if (ModelState.IsValid && InsertSuccess) 
            return Json(new { success = true }, JsonRequestBehavior.AllowGet);
        else
            return Json(new { success = false }, JsonRequestBehavior.AllowGet);
    }

添加

的部分视图
@using (Html.BeginForm("AddUser", "Admin", FormMethod.Post, new { id = "addUserForm" }))
{
    @Html.AntiForgeryToken()
    <fieldset>
        <table class="headertable">

            // form elements
            <tr>
                <td align="center" colspan="2">
                    <button name="button" value="SubmitUser" class="button" id="btnSubmitUser">
                        Submit
                    </button>
                    &nbsp;
                    <button name="button" value="CancelAddUser" class="button" id="btnCancel">
                        Cancel
                    </button>
                </td>
            </tr>
        </table>
    </fieldset>
}

Ajax调用Submit按钮

$('#btnSubmitUser').click(function () {
        $.ajax({
            url: '@Url.Action("AddUser", "Admin", new { Area = "PrivateCEQRApplication" })',
            type: 'POST',
            dataType: 'json',
            cache: false,
            headers: headers,
            data: {
                FirstName: $('#txtFirstNameAdd').val(),
                MiddleName: $('#txtMiddleNameAdd').val(),
                LastName: $('#txtLastNameAdd').val(),
                EmailAddress: $('#txtEmailAddressAdd').val(),
                UserRole: $('#ddlUserRoleSelectedAdd').val()
            },
            beforeSend: function (xhr, settings) { xhr.setRequestHeader('__RequestVerificationToken', token); },
            success: function (data) {
                if (data.success) {
                    alert("The user has been added.");
                    $(".ui-dialog-content").dialog().dialog("close");
                }
                else {

                    //error handling

                }
            },
            error: function (xhr, textStatus, errorThrown) {
                alert("There was a problem with the operation. Please try again" + "Status: " + textStatus + "Error: " + errorThrown);
            }
        });
    });

无论是否出现错误,单击“提交”按钮,我都会获得一个带有{success:true}的json文件,以便通过IE下载。 我已经阅读了很多关于这个以及如何设置Content type application / json或text / html的文章

如果我将内容类型设置为application / json,我仍然会提示下载,如果我设置了text / html,则会打开一个新页面,其中{success:true}。

我也注意到我放了e.preventDefault();在我的btnSubmitUser点击事件中,我没有得到提示下载但是我放松了错误处理。

我想要的是通过执行此代码,如果没有错误(json成功为真),则关闭对话框

alert("The user has been added.");
$(".ui-dialog-content").dialog().dialog("close");

并通过执行json success false block显示错误。

非常感谢您的帮助。

由于

1 个答案:

答案 0 :(得分:0)

正如Adeneo所说,你必须阻止表单提交的默认操作以允许javascript完成。您可以通过添加event.preventDefault();作为函数的第一行(位于$('#btnSubmitUser').click(function () {下方)或使函数返回false来执行此操作。