要通过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属性上发出警告,它会正确显示字段。
答案 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) {
...
}
});