2012-04-03 13 views
0

複数のファイルを(ブルーインプのjqueryファイルのアップロードごとに)アップロードすると、[httppost]アクションはファイルごとに1回入力されます。列挙されたファイルコンテナで1つだけのポストバックを指定して反復することは可能ですか?Jquery File Uploadを指定すると、複数のファイルに対して1回だけポストバックできますか?

ビュー:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
<script src="@Url.Content("~/Scripts/jquery.ui.widget.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.iframe-transport.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.fileupload.js")" type="text/javascript"></script> 

<input id="fileupload" type="file" name="files" multiple="multiple"/> 

コントローラー:

public ActionResult Index() 
{ 
    return View(); 
} 

[HttpPost] 
public ActionResult Index(IEnumerable<HttpPostedFileBase> files) 
{ 
    // This is posted back for every file that gets uploaded...I would prefer it only post back once 
    // with a collection of files to iterate. Is this possible? 
    foreach (var file in files) // There is only ever one file in files 
    { 
     var filename = Path.Combine(Server.MapPath("~/App_Data"), file.FileName); 
     file.SaveAs(filename); 
    } 
    return View(); 
} 

答えて

1

jqueryのコード:dynamiclyするFileUpload NUMを作成します。

<script type="text/javascript"> 
$(function() { 
    $("#num").append("<option value='0'>select file num...</option>"); 
    for (var i = 1; i <= 20; i++) { 
     $("#num").append("<option value='" + i + "'>" + i + "</option>"); 
    } 
    $("#num").change(function() { 
     var num= $("#num").val(); 
     $("#files").html(""); 
     for (var i = 0; i < num; i++) { 
      $("#files").append("<p><input type='file' name='file_"+i+"'></p>"); 
     } 
    }); 
}); 
</script> 

// Html codes 
<% Html.BeginForm("Upload", "Home", FormMethod.Post, new { @enctype = "multipart/form-data", @id = "form" }); %> 
    <select id="num"></select> 
    <div id="files"></div> 
    <input type="submit" value="Submit"><%= ViewData["result"] %> 
<% Html.EndForm(); %> 

コントローラコード:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Upload() 
{ 
    foreach (string name in Request.Files) 
    { 
    var file = Request.Files[name]; 
    file.SaveAs(Server.MapPath("~/" + file.FileName)); 
    } 
    ViewData["result"] = "success."; 
    return View(); 
} 
関連する問題