Tom*_*ove 5 file-upload razor asp.net-mvc-4
我需要能够根据用户需要添加多个文件上传,但用户必须能够为上传指定一个名称以供以后使用。如您所见,我只是动态添加更多文件上传,但为这些上传指定名称似乎是我的问题。有什么办法可以实现这一目标吗?

我视图中的代码:
@using Microsoft.Web.Helpers
@model MusicNews.Web.Models.ViewModel.ArticleCreateModel
@{
ViewBag.Title = "Create";
}
@section content
{
@using (Html.BeginForm("Create", "Article", FormMethod.Post,
new { enctype = "multipart/form-data" }))
{
...
@FileUpload.GetHtml("Files",2,true,false,"Add more")
<p>
<input type="submit" value="Create" />
</p>
}
}
Run Code Online (Sandbox Code Playgroud)
我的控制器中的代码如下所示:
[Authorize]
public ActionResult Create()
{
ViewBag.ArticleTypes = new SelectList(ArticleTypes, "Type");
return View();
}
[HttpPost]
[Authorize]
public ActionResult Create(ArticleCreateModel article)
{
var files = Request.Files;
if (ModelState.IsValid)
{
...
}
return View(article);
}
Run Code Online (Sandbox Code Playgroud)
您可能必须自己创建额外的上传。这可以使用 jQuery 来完成,例如:
这是 HTML:
<div id="uploads">
<div id="uploadtemplate">
<input type="file" name="upload" />
<input type="text" name="FileName" />
<div>
<a href="#" id="addFile">Add file</a>
</div>
Run Code Online (Sandbox Code Playgroud)
加载时,我们将在变量中克隆“模板”以供以后使用。单击后,我们将克隆模板并将其添加到文档中。
$(function() {/
$('#addFile').data('uploadtemplate', $('#uploadtemplate').attr('id', '').clone());
$('#addFile').click(function(e) {
$(this).data('uploadtemplate').clone().insertBefore( $this) );
e.preventDefault();
});
});
Run Code Online (Sandbox Code Playgroud)
您的模型将是:
public class Foo {
public string[] FileName { get; set; } // will contain all file names given by the user
}
Run Code Online (Sandbox Code Playgroud)
然后解析 Request.Files 并执行您知道的魔法:-) Foo.FileName 字段将包含用户为每个上传的文件指定的文件名。您可以使用它,因为 Request.Files 中的第一个文件将映射到 Foo.FileName[0] 等。
| 归档时间: |
|
| 查看次数: |
2589 次 |
| 最近记录: |