2011-05-20 84 views
2

我有一个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对象的功能,这意味着我必须放弃发布文件?

+0

哪里是你正试图在第二个方法来发布文件? – slandau 2011-05-20 21:19:41

+0

该文件是表单(f)的一部分。对不起,不清楚。 ajaxSubmit插件(我把它链接到上面)负责通过隐藏的iFrame技术发布文件。 – BZink 2011-05-20 21:31:33

+0

只要它是一个插件,你如何看待它的源代码,你可能导入了.js,看看它是如何序列化/发布的该文件,并将其中的一部分提取到客户端的自己的方法中。然后使用你的第一个工作的AJAX方法,发布你的序列化模型,连同一个文件序列化插件的方式,然后向你的Action方法添加第二个参数。 – slandau 2011-05-20 21:37:24

回答