我试图将一个IList的HttpPostedFileBase对象和一个“Post”对象传递给一个Action。我收到Post对象就好了,但我的IList总是空的。
见下面的代码......
控制器操作:
[HttpPost]
public ActionResult Create(Post post, IList<HttpPostedFileBase> attachments)
{
if (ModelState.IsValid)
{
var attachmentCounter = attachments.Count;
post.SubmissionDateTime = DateTime.Now;
db.Posts.AddObject(post);
db.SaveChanges();
return RedirectToAction("Index", new { category = post.Category });
}
return View(post);
}
查看:
@using (Html.BeginForm("Create", "Posts", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Post</legend>
@Html.HiddenFor(model => model.Category)
@Html.HiddenFor(model => model.Author)
<div class="editor-label">
<label>Photo Attachments:
<span style="color:#666; font-size:12px; font-weight:normal;">(Optional)</span>
</label>
</div>
<div class="editor-field">
@Html.Raw(FileUpload.GetHtml(
name: "attachments",
initialNumberOfFiles: 1,
allowMoreFilesToBeAdded: true,
includeFormTag: false,
addText: "Add another photo...",
uploadText: "").ToString().Replace("<input value\"\" type=\"submit\" />", ""))
</div>
<br />
<p>
<input type="submit" value="Create" class="createButton" style="font-weight:normal;" /> |
@Html.ActionLink("Back to List", "Index", null, new { category = Model.Category }, null)
</p>
</fieldset>
}
答案 0 :(得分:1)
我试图重现你的问题,但在我的环境中一切正常。但无论如何再次检查FileUpload中的 name 属性与控制器中的第二个参数属性完全相同(甚至更好的copypaste它)。您需要检查的第二件事是您上传到服务器的文件大小。如果它比您的Web配置中允许的请求大小更大,则值将为null。
此外,您可以检查Request.Files
的方法值,如果它为空,则意味着您的文件甚至无法上传到服务器。如果文件可用,您可以从那里获得。