2015-06-26 3 views
0

Мне интересно, можно ли вообще загрузить файл, отправив его в действие контроллера в ASP.NET MVC. Диалог для этой формы загрузки будет динамически генерироваться и будет внутри диалогового окна jQuery в моем случае.Загрузить файл с помощью jQuery и отправить его контроллеру

Я знаю входной файл элемент, но я не знаю, как отправить файл на действия контроллера, не знает, как установить параметр action

+0

проверки этот блог: https: // см./Это объясняет это красиво. – Zippy

+0

Yuu не дал достаточно подробностей о том, что вы делаете, но [этот ответ] (http://stackoverflow.com/questions/29293637/how-to-append-whole-set-of-model-to-formdata-and- get-it-in-mvc/29293681 # 29293681) может помочь –

+0

возможный дубликат [Как я могу загружать файлы асинхронно?] (http://stackoverflow.com/questions/166221/how-can-i-upload-files- асинхронно) –

ответ

0

Ваши действия должны нравится:

[HttpPost] 
public ActionResult Upload(HttpPostedFileBase file) { 

    if (file.ContentLength > 0) { 
    var fileName = Path.GetFileName(file.FileName); 
    var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName); 
    file.SaveAs(path); 
    } 

    return RedirectToAction("Index"); 
} 

Взято из: http://haacked.com/archive/2010/07/16/uploading-files-with-aspnetmvc.aspx/

Затем с помощью JQuery диалоговое окно для загрузки файла:

$dialog.dialog("option", "buttons", { 
    "Save": function() { 
     var dlg = $(this); 
     var formData = new FormData($("#" + formName)[0]); 
     $.ajax({ 
      url: /Controller/upload, 
      type: 'POST', 
      data: formData, 
      processData: false, 
      contentType: false, 
      success: function (response, textStatus, xhr) { 
      ... 
       } 
      }, 
      error: function (xhr, status, error) { 
       .... 
      } 
     }); 
    }, 
    "Cancel": function() { 
     $(this).dialog("close"); 
     $(this).empty(); 
    } 

}); 
0
<form id="frmFile" method="post" enctype="multipart/form-data" action="<%=Url.Content("~/WriteSomeServerAction/")%>" > 

</form> 

// Помещает эту форму modal

и сделать заявку будет отправлен файл в действие. Там вы можете получить доступ к файлу, как в элементе модели, как UploadedFileData.

if (_File.UploadedFileData != null && _File.UploadedFileData.ContentLength > 0) 
       { 
        byte[] buffer = new byte[_File.UploadedFileData.ContentLength]; 
        _File.UploadedFileData.InputStream.Read(buffer, 0, buffer.Length); 
        _File.FileData = System.Text.Encoding.Default.GetString(buffer); 
        _File.UploadedFileData = null; 
       } 
+0

На самом деле я не пробовал это, но нашел другой ответ более полным –