ASP.NET MVC 将模型与文件*一起*传递回控制器

问题描述 投票:0回答:2

我想从我的用户那里获取一些数据。首先,我使用控制器创建一个接收模型的视图:

public ViewResult CreateArticle()
{
    Article newArticle = new Article();
    ImagesUploadModel dataFromUser = new ImagesUploadModel(newArticle);
    return View(dataFromUser);
}

然后,我有这样的看法:

<asp:Content ID="Content1" ContentPlaceHolderID="MainContentPlaceHolder" runat="server">

    <h2>AddArticle</h2>

    <% using (Html.BeginForm("CreateArticle", "Admin", FormMethod.Post, new { enctype = "multipart/form-data" })){ %>


                <%= Html.LabelFor(model => model.newArticle.Title)%>
                <%= Html.TextBoxFor(model => model.newArticle.Title)%>
   
                <%= Html.LabelFor(model => model.newArticle.ContentText)%>
                <%= Html.TextBoxFor(model => model.newArticle.ContentText)%>

                <%= Html.LabelFor(model => model.newArticle.CategoryID)%>
                <%= Html.TextBoxFor(model => model.newArticle.CategoryID)%>

                <p>
                    Image1: <input type="file" name="file1" id="file1" />
                </p>
                <p>
                    Image2: <input type="file" name="file2" id="file2" />
                </p>

            <div>
                <button type="submit" />Create
            </div>



    <%} %>


</asp:Content>

最后 - 原始控制器,但这次配置为接受数据:

   [HttpPost]
    public ActionResult CreateArticle(ImagesUploadModel dataFromUser)
    {
        if (ModelState.IsValid)
        {
            HttpPostedFileBase[] imagesArr;
            imagesArr = new HttpPostedFileBase[2]; 
            int i = 0;
            foreach (string f in Request.Files)
            {
                HttpPostedFileBase file = Request.Files[f];
                if (file.ContentLength > 0)
                    imagesArr[i] = file;
            }

这个控制器的其余部分并不重要,因为无论我做什么,

count
(或
Request.Files
)的
Request.Files.Keys
属性仍然为0。我根本找不到从表单传递文件的方法(模型通过得很好)。

asp.net asp.net-mvc file-upload httppostedfile httppostedfilebase
2个回答
3
投票

您可能需要考虑不要将文件与表格的其余部分一起发布 - 有 充分的理由和其他方法您可以实现您想要的。

另外,请查看关于 MVC 中文件上传的这个问题这个建议


3
投票

您可以将文件添加到您的视图模型中:

public class ImagesUploadModel
{
    ...
    public HttpPostedFileBase File1 { get; set; }
    public HttpPostedFileBase File2 { get; set; }
}

然后:

[HttpPost]
public ActionResult CreateArticle(ImagesUploadModel dataFromUser)
{
    if (ModelState.IsValid)
    {
        // Use dataFromUser.File1 and dataFromUser.File2 directly here
    }
    return RedirectToAction("index");
}
© www.soinside.com 2019 - 2024. All rights reserved.