【问题标题】:Uploading files with MVC 3 ajax style使用 MVC 3 ajax 样式上传文件
【发布时间】:2012-05-29 16:09:04
【问题描述】:

也许只有我一个人,但我正在尝试使用 jQuery 对话框来捕获用户想要上传的文件。 IE9必须支持。 IE9 不支持在我遇到的许多示例和第 3 方工具中使用的 FormData 对象。因此,为了使我的请求不刷新整个页面,我必须将我的上传文件放入 iFrame 中?真的吗?我知道我可以得到一些 Flash 上传器,但我们的网站不支持 Flash,所以现在不可能。

拜托.. 请有人告诉我我做错了,有一种更简单的方法,因为我似乎找不到它.. 至少在 IE9 上无法使用。

表格

<form action="/ControllerName/ActionName" method="post" enctype="multipart/form-data">
    <label for="file">Filename:</label>
    <input type="file" name="file" id="file" />
    <input type="submit" name="submit" value="Submit" />
</form> 

然后变成这样的iFrame

<iframe src="myUrl"></iframe>

【问题讨论】:

  • 使用 iFrame 有什么问题?如果您将其放在灯箱/对话框中,用户将无法区分。
  • @SpencerRuport 对我来说只是觉得它应该以更好的方式完成。
  • 应该的。但作为开发人员,我们只是浏览器大战的受害者。
  • 使用Ajax.BeginForm 的ajaxified 表单怎么样? msdn.microsoft.com/en-us/library/…
  • @mattytommo 我尝试使用第一件事。 ajax 对象不支持文件上传:( 然后我尝试了一个普通的形式,将其序列化并使用 ajax 传递数据,但这也不起作用我很确定这是由于 HTTP 传输文件的方式多部分帖子。

标签: ajax asp.net-mvc-3 html


【解决方案1】:

查看:

@using (Html.BeginForm("FileUpload","Message",FormMethod.Post,new { enctype="multipart/form-data"})) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Message</legend>

//your html here

                                <input type="file" name="files"/>

    </fieldset>

控制器:

[HttpPost]
        public ActionResult FileUpload(FormCollection values, IEnumerable<HttpPostedFileBase> files)
        {
             //do what you want with form values then for files

           foreach (var file in files)
            {
                if (file.ContentLength > 0)
                {
                    byte[] fileData = new byte[file.ContentLength];
                    file.InputStream.Read(fileData, 0, file.ContentLength);

                   //do what you want with fileData
                }
            }
        }

我提供多个文件上传,所以我使用

IEnumerable<HttpPostedFileBase> files 

如果你只想要一个文件,那么只使用

HttpPostedFileBase file  

并在您的视图中将输入类型更改为

<input type="file" name="file"/>  

就这么简单。 问候

已编辑:

看看更多好的例子:

http://www.strathweb.com/2012/04/html5-drag-and-drop-asynchronous-multi-file-upload-with-asp-net-webapi/

http://css.dzone.com/articles/implementing-html5-drag-drop

问候

【讨论】:

  • 我发誓我以前在某个地方看到过这个解决方案并尝试过。但为了取笑自己,我又试了一次。我在这里遇到的问题是“文件”返回为空。我也尝试摆脱 IEnumerable 并且只是没有运气的文件..仍然为空
  • 由于问题是关于通过 Ajax 对服务器进行异步调用,因此 Html.BeginForm 无济于事。
  • 我知道这是很久以前的事了,但这就是我最终用 iFrame 做的事情。
  • 这个答案和ajax有什么关系?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-20
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
  • 2012-11-27
  • 2015-10-28
  • 2012-11-21
相关资源
最近更新 更多