MVC 3 jquery ajax post 2 objects



>我有一个控制器操作,它将两个对象作为参数。我根本无法让它工作,他们总是以空的形式返回。我的最新尝试如下所示。我尝试了许多其他变体。在这种情况下,类是一个具有 2 个属性的类,这些属性是 Form1 和 Form2 的类型。我还尝试让控制器将两个类作为参数,数据部分看起来像 { form1: form1Data, form2: form2Data } 也不起作用。我也尝试使用JSON.stringify来形成数据,但没有运气。在网络监视器中查看,我看到数据返回到服务器,它只是MVC用于将查询字符串解码为对象的引擎无法处理我传回的内容。提前感谢您提供任何信息!

客户端

var formData = $("#form1").serialize();
var formData2 = $("#form2").serialize();
var formInfo = new Object();
formInfo.FormData = formData;
formInfo.FormData2 = formData2;
$.ajax({
    url: 'Controller/Action',
    type: 'POST',
    data:  formInfo,
    success: function (data) {
        //do stuff
    }
});

服务器端

public ActionResult SaveForms(FormInfo formInfo)
{
    //Do Stuff here
}

您可以将 JSON 请求与 .serializeArray() jQuery 方法结合使用。假设您有以下模型:

public class FormInfo
{
    public Form1Data Form1Data { get; set; }
    public Form2Data Form2Data { get; set; }
}

其中Form1DataForm2Data是一些完全任意的复杂类。现在在客户端上,我们假设您有 2 种不同的形式(#form1#form2 其输入元素名称在默认模型粘合剂线格式方面与您的复杂结构相匹配)。发送 AJAX 请求并将 2 个表单打包在一起变得微不足道:

var form1Data = {};
$.each($('#form1').serializeArray(), function () {
    form1Data[this.name] = this.value;
});
var form2Data = {};
$.each($('#form2').serializeArray(), function () {
    form2Data[this.name] = this.value;
});
$.ajax({
    url: '@Url.Action("someaction", "somecontroller")',
    type: 'post',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify({
        form1Data: form1Data,
        form2Data: form2Data
    }),
    success: function (result) {
        // TODO: do something with the result 
    }
});

当然,您正在发布到的控制器操作如下所示:

[HttpPost]
public ActionResult SomeAction(FormInfo formInfo)
{
    ...
}

我正在做这样的事情,但我有一个对象和其他 Formdata 来传递我的控制器

var diffrepancy = self.newCptyReply();

        if ($('#UploadFile')[0]) {
            var upload = new FormData(),
                file = $('#UploadFile')[0].files[0];
            upload.append('id', self.globalMessageId());
            upload.append('discrepancy', ko.toJSON(discrepancy));
            upload.append('doc', file); 

        }           
        datacontext.saveCptyToReply(self, upload);

并在控制器签名中

   public ActionResult SaveCptyToReply(Guid id, Trade discrepancy, HttpPostedFileBase doc)

但是当它到达控制器 id 时,doc 没问题,但差异为空......当调用函数时,它有数据。

怎么办...

最新更新