如何使用AntiForgeryToken将MVC视图模型传递到AJAX调用中

时间:2016-12-02 06:39:04

标签: javascript jquery ajax antiforgerytoken

下面的代码对我有用,但是我试图找到一种方法来从表单中读取所有值,而不必在JavaScript中重新创建视图模型(vm是参数的名称)对象)。

我尝试序列化表单并将其传入,但也许我的语法不正确。

有什么建议吗?



$.ajax({
    type: "POST",
    dataType: "json",
    url: "/post-details-save",
    data: addAntiForgeryToken({
        vm: ({
            Id: $("#PostImageDetails_Id").val(),
            Title: $("#PostImageDetails_Title").val(),
            Description: $("#PostImageDetails_Description").val(),
            CopyrightOwner: $("#PostImageDetails_CopyrightOwner").val(),
            CopyrightUrl: $("#PostImageDetails_CopyrightUrl").val(),
            SourceName: $("#PostImageDetails_SourceName").val(),
            SourceUrl: $("#PostImageDetails_SourceUrl").val(),
            SourceLicenseType: $("#PostImageDetails_SourceLicenseType").val()
        })
    }),
    success: postDetailsSaveSuccess,
    error: postDetailsSaveError
});




1 个答案:

答案 0 :(得分:0)

确认表单设置

@using (Html.BeginForm("ActionName", "ControllerName", FormMethod.Post, new { @id = "formID" }))

我在部分视图中提交表单时做了类似的事情。

基本上,您需要确认您的html表单设置正确:

AntiForgeryToken

@Html.AntiForgeryToken()

数据字段

看起来类似于以下内容,名称属性很重要。

<input type="hidden" name="ApproveUserID" id="ApproveUserID" value="@Model.ApproveUserID" />

AJAX表格

如果您的表单设置正确,如上所述,您将能够通过AJAX提交数据,类似于下面的JS。

var form = $("#formID");
$.ajax({
    url: form.attr('action'),
    type: form.attr('method'),
    data: form.serialize(), // data to be submitted
    success: function (response) {
        if (response == "Success") {
            //DO SUCCESS STUFF
        } else
        {
            //DO FAILURE STUFF
        }
    },
    error: function () {
            //DO ERROR STUFF
    }
});

专业提示:

您始终可以通过

扩展您发送的数据
var formData = form.serialize();

进入一个变量并从那里扩展它。

祝你好运。