【发布时间】:2012-03-14 03:34:51
【问题描述】:
当我尝试使用 ASP.NET MVC 上传文件时,它在 FF && Chrome 中运行良好,但在 IE 和 Opera 中会弹出一个对话框,要求我下载、保存或取消。
选择任何一个选项都会阻止文件上传工作。我该如何解决这个问题?
public class ImportModel
{
[Required]
[FileExtensions("csv", ErrorMessage = "Please upload a valid .csv file")]
public HttpPostedFileBase File { get; set; }
}
[HttpPost]
public virtual ActionResult StartImport(ImportModel model = null)
{
if (model != null)
{
var status = _importService.StartImport(model);
return Json(status, JsonRequestBehavior.AllowGet);
}
return null;
}
查看下面的代码(摘要):
<div id="dlgImport" class="hidden">
@using (Html.BeginForm(MVC.Import.StartImport(), FormMethod.Post, new { @class = "smallForm", id = "frmImport", enctype = "multipart/form-data" }))
{
<div class="fields-inline">
<div class="editor-label">
@Html.Label("File")
</div>
<div class="editor-field">
@Html.TextBoxFor(x => x.File, new { @class="input-file", type = "file" })
@Html.ValidationMessageFor(x => x.File)
</div>
</div>
}
</div>
</div>
$(function() {
$("#frmImport").ajaxForm({
success: function (responseHtml) {
// response is wrapped in pre tags by the browser - the ajax upload is carried out using an iframe
var response = $.parseJSON($(responseHtml).text());
}
});
});
var vm = {
startImport: function () {
if ($("#frmImport").valid()) {
$("#frmImport").submit();
}
}
}
【问题讨论】:
-
您调用此操作的方式可能有误。有机会看到您的视图代码吗?你的javascript呢?也许您正在使用一些客户端文件上传组件(因为您使用 Ajax)?这个组件与 IE 兼容吗?从控制器操作返回 null 也不是一个好主意。如果客户端代码期望响应是某种特定格式(例如 JSON)返回 null 肯定会破坏它。
-
嗨达林,我已经添加了视图代码。我正在使用 Jquery 的 ajaxForm。不确定这是否与它有关...
-
哦,是的,这与您的问题有很大关系。看我的回答。
标签: asp.net-mvc internet-explorer file-upload opera