【问题标题】:How to pass MVC view model into AJAX call with AntiForgeryToken如何使用 AntiForgeryToken 将 MVC 视图模型传递给 AJAX 调用
【发布时间】:2016-12-02 15:26:07
【问题描述】:

下面的代码对我有用,但我试图找到一种从表单中读取所有值的方法,而不必在 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
});

【问题讨论】:

  • 您可以使用.$ajaxSetup。有关示例,请参阅this answer。然后你可以在发送之前拦截请求,然后添加你的 antiforgerytoken。
  • 你在使用 MVC.NET 吗?
  • 是带有 Razor 视图的 MVC

标签: javascript jquery ajax antiforgerytoken


【解决方案1】:

确认表单设置

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

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

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

AntiForgeryToken

@Html.AntiForgeryToken()

数据字段

在 name 属性很重要的情况下,可能类似于以下内容。

<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();

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

祝你好运。

【讨论】:

  • 你的建议对我不起作用,它根本没有达到服务器端功能(我得到 500 状态)......我正在使用 jQuery v3.1.1 和我的 AJAX 函数看起来比如:公共异步任务 PostDetailsS​​ave(PostImageDetailsViewModel vm)
猜你喜欢
  • 2017-02-18
  • 2012-10-02
  • 1970-01-01
  • 2015-10-19
  • 2015-01-28
  • 2020-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多