我有一个Action Method从客户端接收一个复杂的JSON对象。我在客户端序列化这个对象,并且由于复杂性,我不能(不想)使用表单提交来发布数据。MVC3 - 通过AJAX&JSON无格式地发布文件
我还需要能够发送文件以及这个ajax请求。我的动作方法完美地工作,并使用jQuery.ajax()很好地绑定了JSON对象(实际上是对象列表)。当我移动到ajax form plugin以便我可以发送文件时,对象绑定中断。我试图用插件提交表单,并将其作为附加数据发送给我。操作方法不再看到我的对象。
有关如何将JSON和文件一起发布到同一个操作方法的想法?
下面是可用的jQuery.ajax()方法。没有表单提交这里,这只是发送JSON数据到服务器
$.ajax({
url: "/Controller/Create2",
type: 'POST',
data: JSON.stringify(model),
dataType: 'json',
contentType: 'application/json, charset=utf-8',
beforeSend: function() {
},
success: function (data) {
},
error: function() {
}
});
我的行动方法接受对象的名单完全这样。
public ActionResult Create2(List<CreateModel> model)
{
//Do stuff
}
但是,当我做了一个ajax提交表单并追加数据,模型返回null。
f.ajaxSubmit({
url: "/Controller/Create2",
type: "POST",
data: JSON.stringify(model),
dataType: 'json',
contentType: 'application/json, charset=utf-8',
beforeSend: function() {
},
success: function (data) {
},
error: function (data) {
}
});
我需要保留的操作方法结合JSON对象的功能,这意味着我必须放弃发布文件?
哪里是你正试图在第二个方法来发布文件? – slandau 2011-05-20 21:19:41
该文件是表单(f)的一部分。对不起,不清楚。 ajaxSubmit插件(我把它链接到上面)负责通过隐藏的iFrame技术发布文件。 – BZink 2011-05-20 21:31:33
只要它是一个插件,你如何看待它的源代码,你可能导入了.js,看看它是如何序列化/发布的该文件,并将其中的一部分提取到客户端的自己的方法中。然后使用你的第一个工作的AJAX方法,发布你的序列化模型,连同一个文件序列化插件的方式,然后向你的Action方法添加第二个参数。 – slandau 2011-05-20 21:37:24