在ASP.NET MVC中发布序列化的ASP.NET模型和带有单个Jquery Ajax调用的文件

时间:2014-03-29 09:26:40

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

我正在asp.net中开发一个电影库应用程序。在管理页面中,我需要向数据库添加电影(详细信息,如姓名,演员,海报网址)。而且我还需要将电影的预告片上传到服务器中的特定文件夹。

在我的AddMovie视图(强烈键入MovieDetails模型)中,我有一个表单,可以将电影信息包含为文本,并使用文件输入来上传文件(电影预告片)。在我的控制器中,我将绑定的MovieDetails模型和上传的文件单独作为两个参数进行如下。

AddMovie Controller

刚开始我只是从我的视图发布到这个控制器而不使用ajax。我能够将模型和文件送到控制器来完成我需要做的事情。

然后我转移到ajax并尝试在没有页面刷新的情况下执行此操作。

enter image description here

现在没有文件无法上传。我尝试调试并注意到控制器的uploadFile参数为空虽然我将文件附加到视图中的文件输入。

有没有办法将模型发布到控制器并上传文件而无需完全更改控制器并使用单个ajax调用?

否则可以通过模型属性传递文件路径,访问该文件路径并使用Ajax在控制器中上传相关文件。

谢谢!

2 个答案:

答案 0 :(得分:2)

正如Darin所说,出于某些安全原因,没有简单的方法可以通过ajax处理文件上传问题,而且您无法轻松地将文件上传到服务器;但好消息是有一些技巧可以解决它,例如,您可以轻松地在mvc形式中使用jquery AjaxForm,只需稍加修改即可。看看jquery-ajax-form及其样本,你会得到一些好主意。

答案 1 :(得分:1)

通常您无法使用AJAX上传文件。支持FormData的现代浏览器允许您直接生成包含multipart/form-data内容的AJAX请求。另请查看本机XMLHttpRequest对象。

但是如果您需要支持旧版浏览器,则需要一些后备机制,例如隐藏的iframe或Flash电影。 blueimp等插件会检测浏览器功能并使用浏览器支持的最佳选项上传文件。