0

我有一个控制器动作,它将两个对象作为参数。我根本无法让它工作,它们总是以空值返回。我最近的尝试如下所示。我尝试了许多其他变体。在这种情况下,FormInfo 类是一个具有 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
}
4

2 回答 2

1

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

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

whereForm1DataForm2Data是一些完全任意的复杂类。现在在客户端上,我们假设您有 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)
{
    ...
}
于 2012-07-02T21:46:22.080 回答
0

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

var discrepancy = 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)

但是当它到达 Controller id 时,文档没问题,但差异为空......当调用函数时它有数据......

该怎么办...

于 2014-01-17T21:37:28.383 回答