当我上传多个文件时(每个blueimp jquery文件上传),每个文件输入一次[httppost]动作。是否可以指定一个且只有一个带有枚举文件容器的回发来进行迭代?
查看:
<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();
}
答案 0 :(得分:1)
jquery代码:动态创建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();
}