2

我正在尝试将 HttpPostedFileBase 对象的 IList 和“发布”对象传递给操作。我收到 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>
}
4

1 回答 1

1

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

您也可以检查您的方法值Request.Files是否为空,这意味着您的文件甚至没有上传到服务器。如果文件可用,您可以从那里得到它。

于 2013-01-26T00:30:53.043 回答