【问题标题】:Trying to upload a file using ajax in ASP.NET MVC尝试在 ASP.NET MVC 中使用 ajax 上传文件
【发布时间】:2011-12-22 12:22:16
【问题描述】:

我正在使用 ASP.NET MVC 3,我想使用 ajax 表单上传图像文件

我的索引视图代码是:

 <% using (Ajax.BeginForm("Save","Home", new AjaxOptions() { HttpMethod = "POST", InsertionMode = InsertionMode.Replace }, new { enctype = "multipart/form-data" }))
    {%>
       <input type="file" /><input type ="submit" value="Submit File"/>
   <% } %>

控制器代码为:

[HttpPost]
public ActionResult Save()
{
   ViewBag.Message = "Welcome to ASP.NET MVC!";
   return View("Index");
}

当我上传文件并单击按钮时,提交了 ajax 表单,但我得到的 Request.File.Count 为 0。

【问题讨论】:

  • 我不认为你可以上传这样的文件。我认为大多数异步文件上传器使用隐藏的iframe 技术。但是ianae。

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


【解决方案1】:

mvc 中默认不显眼的 ajax 不支持上传文件。您需要使用隐藏的 iframe/plugin (flash, silverlight..)/html5 或它们的组合。

一些可能对您有所帮助的脚本:

【讨论】:

    【解决方案2】:

    您可以使用@Lukáš Novotný 建议的插件,或者您可以执行以下操作

    • 创建通用 HTTP 处理程序 uploadfile.ashx
    • 发布数据到文件(设置表单action="yourpath/UploadFile.ashx"
    • 在处理程序中,您可以将文件读取为 HttpPostedFile uploadfile = context.Request.Files[0];

    【讨论】:

      【解决方案3】:

      这是我管理文件上传的操作。可以与大多数 Ajaxy 文件上传器一起使用。 (我认为)

      public ActionResult Upload(HttpPostedFileBase uploadfile)
              {
                  try
                  {
                      var dr405 = new DR405Service().GetDR405ById(new DR405DBContext(), DR405Profile.CurrentUser.TangiblePropertyId);
                      var saveLocation = Path.Combine(DR405Service.SavePath + DR405Profile.CurrentUser.TangiblePropertyId);
                      System.IO.Directory.CreateDirectory(saveLocation);
                      if ((int)uploadfile.ContentLength / 1024 <= 15000)
                      {
      
                          uploadfile.SaveAs(Path.Combine(saveLocation, Path.GetFileName(uploadfile.FileName)));
                          var file = new dr405files { TangiblePropertyId = DR405Profile.CurrentUser.TangiblePropertyId, FileName = uploadfile.FileName, UploadDate = DateTime.Now };
                          //dr405.dr405files.Add(file); 
                          //c.dr405s.Add(dr405);
      
                          db.Entry(file).State = file.FileId == 0 ? EntityState.Added : EntityState.Modified;
                          //db.Entry(dr405).State = EntityState.Modified;
      
                          new DR405Service().Save(db);
                          ViewData["UploadStatus"] = String.Format("File name: {0}, {1}Kb Uploaded Successfully.", uploadfile.FileName, (int)uploadfile.ContentLength / 1024);
                      }
                      else
                      {
                          ViewData["UploadStatus"] = String.Format("File exceeds 15MB upload limit.  Please reduce size and try again.", uploadfile.FileName);
                      }
                  }
                       catch (Exception ex)
                      {
      
                          ViewData.ModelState.AddModelError("_FORM", ex.ToString());
                      }
      
                  return View();
              }
      

      【讨论】:

        猜你喜欢
        • 2010-10-17
        • 2011-06-12
        • 1970-01-01
        • 1970-01-01
        • 2012-11-27
        • 2011-01-26
        • 2011-02-16
        相关资源
        最近更新 更多