【问题标题】:Sending serialized form to controller plus some other data [duplicate]将序列化表单发送到控制器以及其他一些数据[重复]
【发布时间】:2016-02-23 09:26:03
【问题描述】:

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

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 仍然为空。

【问题讨论】:

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


【解决方案1】:

来自文档here

数据:

类型:PlainObject 或 String 或 Array

PlainObject 上的文档:(强调我的)

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

您的data 不符合PlainObjectStringArray 的条件。

【讨论】:

  • 好的,现在我知道为什么它不起作用了,谢谢!我仍然需要弄清楚如何发送我需要的一切
  • @chiapa 不会 this answer Stephen 建议的工作吗?
  • 不会,因为我要发送的添加数据不是来自输入。无论如何,我想我通过将纯文本添加到序列化表单变量中找到了一种解决方法 - 我正在处理它并发布它,如果它有任何好处。谢谢
  • @chiapa,再次阅读我在对您的问题的评论中给您的链接。这两种方法都允许您序列化表单并添加不属于表单或来自输入的其他数据。使用FormData 是最简单的,您可以通过答案的最后一段/代码 sn-p 中显示的代码来完成
猜你喜欢
  • 2014-03-13
  • 1970-01-01
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
相关资源
最近更新 更多