Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有文件上传的JQuery Ajax表单在IE中不起作用_Jquery_Asp.net Mvc 3_Internet Explorer_File Upload_Ajaxform - Fatal编程技术网

带有文件上传的JQuery Ajax表单在IE中不起作用

带有文件上传的JQuery Ajax表单在IE中不起作用,jquery,asp.net-mvc-3,internet-explorer,file-upload,ajaxform,Jquery,Asp.net Mvc 3,Internet Explorer,File Upload,Ajaxform,我正在使用Jquery Ajax表单上传文件,这在Chrome和Firefox中运行良好,但在IE中不起作用。它会弹出一个窗口,告诉我保存要上传的文件 如有必要,我的代码示例如下: HTML: 行动 [HttpPost] public JsonResult AddNewDocument(DocumentModel document) { if (ModelState.IsValid) { List<DocumentMo

我正在使用Jquery Ajax表单上传文件,这在Chrome和Firefox中运行良好,但在IE中不起作用。它会弹出一个窗口,告诉我保存要上传的文件

如有必要,我的代码示例如下: HTML:

行动

[HttpPost]
    public JsonResult AddNewDocument(DocumentModel document)
    {
        if (ModelState.IsValid)
        {
            List<DocumentModel> documents = null;
            if (Session["Documents"] != null)
            {
                documents = (List<DocumentModel>)Session["Documents"];
                var doc = documents.OrderByDescending(x => x.Number).Take(1).FirstOrDefault();

                document.Number = doc != null ? doc.Number + 1 : 1;
                document.FileName = document.File != null ? document.File.FileName : document.FileName;
                documents.Add(document);
            }
            else
            {
                documents = new List<DocumentModel>();
                document.Number = 1;
                document.FileName = document.File != null ? document.File.FileName : document.FileName;
                documents.Add(document);
                Session["Documents"] = documents;
            }

            var displaydocs = documents.Select(x => new
            {
                Name = x.Name,
                Number = x.Number,
                File = x.File != null ? x.File.FileName : x.FileName,
                Route = x.Route != null ? x.Route : "#",
            });

            return Json(displaydocs, JsonRequestBehavior.AllowGet);
        }
        else
        {
            return null;
        }
    }

同样,它适用于除IE8之外的所有浏览器。我可能不是唯一一个,但我还没有找到答案。

尝试在AJAX调用中添加缓存:“false”。。。 比如:

 $.ajax({
 type:"POST", 
 url:'process.php',
 cache:'false',   //IE FIX
 data: data, 
 success: function(){ //on success do something...

 } 
 });
我问了这个问题。请在邮寄前搜索。委员会明确指出:

支持XMLHttpRequest级别2的浏览器将能够 无缝上传文件,甚至在上传过程中获得进度更新 收益对于较旧的浏览器,使用了一种回退技术 涉及iFrame,因为无法使用 XMLHttpRequest对象的1级实现。这是一个常见的问题 回退技术,但它具有固有的局限性。iframe 元素用作表单提交操作的目标,该操作 表示将服务器响应写入iframe。这很好 如果响应类型是HTML或XML,但如果 响应类型是脚本或JSON,两者通常都包含 使用实体引用时需要重复的字符 在HTML标记中找到

在使用时考虑脚本和JSON响应的挑战 在iframe模式下,表单插件允许嵌入这些响应 在textarea元素中,建议您对这些 与文件上载和旧版本结合使用时的响应类型 浏览器。但是,请注意,如果在 表单然后请求使用普通XHR提交表单(不是 iframe)。这会给服务器代码带来负担,让它们知道何时使用 一个文本区域,何时不显示


由于您要从控制器操作返回JSON,您需要尊重文档中所说的=>封装在
元素中。

我还没有尝试使用textarea,但是如果我定义要在操作中返回的内容类型为text/html,则效果很好:

 return new JsonResult() { ContentType = "text/html", Data = result };
  public class DocumentModel
{
    public int Number { get; set; }
    [Required]
    public string Name { get; set; }
    [Required]
    public HttpPostedFileBase File { get; set; }

    public string FileName { get; set; }
    public string Route { get; set; }
}
 $.ajax({
 type:"POST", 
 url:'process.php',
 cache:'false',   //IE FIX
 data: data, 
 success: function(){ //on success do something...

 } 
 });
 return new JsonResult() { ContentType = "text/html", Data = result };