2011-12-22 3 views
2

Я использую ASP.NET MVC 3, я хочу, чтобы загрузить файл изображения, используя форму АЯКСПопытка загрузить файл с помощью Ajax в ASP.NET MVC

мой взгляд Индекс коды:

<% 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"); 
} 

Когда я загрузить файл и нажмите на кнопку, то Аякса форма была отправлена, но я получаю Request.File.Count 0.

+0

Я не думаю, что вы можете загружать такие файлы. Я думаю, что большинство асинхронных загрузчиков файлов используют скрытую технику iframe. Но ianae. –

ответ

0

По умолчанию ненавязчивый ajax в mvc не поддерживает загрузку файлов. Вам нужно использовать скрытый iframe/plugin (flash, silverlight ..)/html5 или их комбинацию.

Некоторые сценарии, которые могут помочь вам:

0

Вы можете использовать те плагины, предложенные @ Лукаша Новотны, иначе вы можете сделать следующее

  • Создать общий HTTP-обработчик uploadfile.ashx
  • сообщение данных в файл (установить действие формы = «yourpath/UploadFile.ashx»
  • В обработчике вы можете прочитать файл как HttpPostedFile uploadedfile = context.Request.Files [0];
0

Вот мое действие, которое управляет загрузкой файлов. Будет работать с большинством файловых загрузчиков 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(); 
     } 
Смежные вопросы