使用FIleUpload处理程序</httppostedfilebase>后,IList <httppostedfilebase>为空

时间:2013-01-25 22:52:29

标签: c# asp.net-mvc

我试图将一个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:&nbsp;&nbsp;
                <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>
}

1 个答案:

答案 0 :(得分:1)

我试图重现你的问题,但在我的环境中一切正常。但无论如何再次检查FileUpload中的 name 属性与控制器中的第二个参数属性完全相同(甚至更好的copypaste它)。您需要检查的第二件事是您上传到服务器的文件大小。如果它比您的Web配置中允许的请求大小更大,则值将为null。

此外,您可以检查Request.Files的方法值,如果它为空,则意味着您的文件甚至无法上传到服务器。如果文件可用,您可以从那里获得。