一尘不染

在MVC控制器中使用多个参数时,Ajax表单序列化不绑定

ajax

我的模型有多个输入的视图(Html.TextBoxFor(x => x.attribute)等。我的ajax方法是:

function callMethod() {
    $.ajax({
        type: "POST",
        data: $('#Form').serialize() ,
        url: '@Url.Action("formMethod", "Test")',
    }).done(function (newTable) {
        $('#RefundTableDiv').html(newTable);
    });
};

并且这可以完美地工作,该模型完美地适用于formMethod,但是当我更改formMethod并添加另一个参数(例如“ int
test”)时,它不再起作用。

我的方法如下:

function callMethod() {
 var number = 2;
    $.ajax({
        type: "POST",
        data: {"model": $('#Form').serialize(),
               "test": number}, 
        url: '@Url.Action("formMethod", "Test")',
    }).done(function (newTable) {
        $('#RefundTableDiv').html(newTable);
    });
};

“测试”:编号确实正确输入到控制器中的方法,但是模型现在突然为空?

我究竟做错了什么?


阅读 197

收藏
2020-07-26

共1个答案

一尘不染

使用.serialize()会将您的模型序列化为查询字符串(例如someProperty=someValue&anotherProperty=anotherValue&...)。要添加其他名称/值对,您可以手动添加,例如

var data = $('#Form').serialize() + '&test=' + number;
$.ajax({
    ....
    data: data;

或使用param()方法(如果要添加多个项目和/或数组,则很有用)

 var data = $("#Form").serialize() + '&' + $.param({ test: number }, true);
 $.ajax({
    ....
    data: data;
2020-07-26