首先創建2周的ViewModels
public class NewViewModel
{
// list of files with additional data
public List<UploadItem> UploadItems { get; set; }
public string AnotherPropForView { get; set; }
}
public class UploadItem
{
// your additional data
public string CustomProp1 { get; set; }
public string CustomProp2 { get; set; }
// file
public HttpPostedFileBase UpFile { get; set; }
}
創建控制器。一個用於顯示空白表單的動作,另一個用於來自視圖的過程數據
public class SomeController : Controller
{
public ActionResult Create()
{
NewViewModel model = new NewViewModel
{
// inicialize list
UploadItems = new List<UploadItems>
{
// inicialize empty objects (if you want to have 2 file fields with additional data)
// or inicialize only one object and another fields add by Javascript
new UploadItem {},
new UploadItem {},
}
}
return View(model);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(NewViewModel model)
{
// if (ModelState.IsValid) etc...
foreach (var uploadItem in model.UploadItems)
{
// work with file and additional data
var file = uploadItem.UpFile;
var prop1 = uploadItem.CustomProp1;
// file.SaveAs("/some/where"); atc ...
}
// return some view...
}
}
而創建視圖
@model Path.To.NewViewModel
@using (Html.BeginForm("Create", "Some", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@* Print all inicialized upload items *@
@for (int i = 0; i < Model.UploadItems.Count; i++)
{
@Html.TextBoxFor(model => model.UploadItems[@i].CustomProp1)
@Html.TextBoxFor(model => model.UploadItems[@i].CustomProp2)
<input type="file" id="UploadItems[@i].UpFile" name="UploadItems[@i].UpFile" />
}
<button name="Action" type="submit" value="Save" class="btn">Save</button>
}
您可以使用JavaScript動態添加Uploaditem形成 - 你必須產生正確的索引名和輸入
感謝您的代碼ID屬性。我有它的工作:D 我留下的唯一問題是在模型中使用DataAnnotations?有任何想法嗎? – Jenki
您可以在ViewModel中使用DataAnnotations。例如在UploadItem類 [Display(Name =「Name for CustomProp1」)] public string CustomProp1 {get;組; } – Krahu