将序列化表单发送到控制器以及其他一些数据

时间:2016-02-23 09:26:04

标签: javascript c# ajax asp.net-mvc

我有一个表单,我可以成功发送到我的控制器操作:

this.submitForm = function (e) {
    var formData = $("#FinalizeForm").serialize();

    $.ajax({
        type: "POST",
        url: '/MyController/MyMethod',
        data: formData
    });

我的控制器:

[HttpPost]
public void MyMethod(SomeModel model)

工作正常。但是,我想发送附加数据以及表单,例如:

var test = {
    name: 'Mike',
    age: '40',
    nationality: 'Portuguese'
}

$.ajax({
    type: "POST",
    url: '/MyController/MyMethod',
    data: {
        model: formData,
        test: test
    }
});

控制器:

[HttpPost]
public void MyMethod(SomeModel model, AnotherModel test)

但是这样,model变量变为空,并且填充了test变量。为什么是这样?为什么模型之前已填充,现在却没有?

我测试了单独发送,但以不同的方式:

$.ajax({
    type: "POST",
    url: '/MyController/MyMethod',
    data: {
        model: formData
    }
});

model仍为空。

1 个答案:

答案 0 :(得分:1)

来自文档here

  

数据:

     

键入:PlainObject或String或Array

关于PlainObject的文件:(强调我的)

  

PlainObject类型是一个JavaScript对象,包含零个或多个键值对。换句话说,普通对象是Object对象。它被指定为" plain"在jQuery文档中将其与其他类型的JavaScript对象区分开来:例如,null,用户定义的数组和主机对象(如document),所有这些对象的typeof值为" object。" jQuery.isPlainObject()方法标识传递的参数是否是普通对象。

您的data不具备PlainObjectStringArray的资格。