MVC AJAX POST模型和antiforgerytoken都没有绑定模型

时间:2014-10-24 13:26:27

标签: ajax asp.net-mvc json model-binding

要通过AJAX提交表单(不是真正的表单,只是带输入字段的div),我将从视图中发送我的(序列化)模型和令牌。 但是,模型不想绑定,它不是null,但没有设置值。 与以前不同,令牌没有给出任何问题,所以我假设一个人通过了。

我的行动是:

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Submit(FormModel model)

然后我的js是:

var url = '/MyController/Submit';
        var selector = '#data :input';
        var pagedata = $(selector).serialize();    

        var postData = {
            __RequestVerificationToken: $('[name= "__RequestVerificationToken"]').val(),
            jsonRequest:pagedata
        };

        $.ajax({
            url: url,
            type: 'POST',
            data: postData,
            dataType: 'json',
            success: function (result) {
               alert(1);
            },
            error: function (error) {
                  alert(2);
            }
        });

注意:序列化没问题,如果我在Pagedata属性上发出警告,它会正确显示字段。

1 个答案:

答案 0 :(得分:1)

您正在发布的json中的名为jsonRequest的属性中发送模型数据,而MVC将期望模型数据作为发布的json的根。

您可以添加令牌,就像它是已发布的json的另一个属性一样(绑定到FormModel时将被忽略但它将用于满足[ValidateAntiForgeryToken]属性)。

例如:

var selector = '#data :input';
var pagedata = $(selector).serialize();
pagedata = pagedata + '&__RequestVerificationToken=' + $('[name= "__RequestVerificationToken"]').val();

$.ajax({
    url: url,
    type: 'POST',
    data: pagedata,
    dataType: 'json',
    success: function (result) {
        ...
    },
    error: function (error) {
        ...
    }
});