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

ASP.NET MVC将模型*和文件一起传递回控制器,asp.net,asp.net-mvc,file-upload,httppostedfile,httppostedfilebase,Asp.net,Asp.net Mvc,File Upload,Httppostedfile,Httppostedfilebase,好的,我已经做了好几个小时了,我根本找不到解决办法 我想从我的用户那里获取一些数据。因此,首先,我使用控制器创建一个接收模型的视图: public ViewResult CreateArticle() { Article newArticle = new Article(); ImagesUploadModel dataFromUser = new ImagesUploadModel(newArticle); return View(dataFromUser); } 那

好的,我已经做了好几个小时了,我根本找不到解决办法

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

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>

此控制器的其余部分无关紧要,因为无论我做什么,
Request.Files
(或
Request.Files.Keys
)的
count
属性保持为0。我根本找不到从表单传递文件的方法(模型通过得很好)。

你可能想考虑不要用文件的其余部分张贴文件——你可以实现你想要的。
此外,请查看并了解MVC中的文件上载。

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

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");
}

这可能是一个很棒的解决方案,但是如何更新视图中的模型数据呢。也就是说,上传机制是如何工作的(替换的是什么?)目前ASP.NET MVC中没有内置HTML帮助程序,允许您生成文件输入。您需要手动生成它们,或者使用MVCContrib中的一个帮助程序。那么,我想我将它分成两个视图:-P谢谢。@DarinDimitrov出错:-没有MediaTypeFormatter可以从媒体类型为“multipart/form data”的内容中读取“CommentModel”类型的对象@ujjaval,您似乎试图在Web API控制器操作中使用此选项。我的答案是关于ASP.NET MVC的。好吧,我想我会把它分成两个视图:-P谢谢。它甚至可能是同一个视图,其中有两个表单(实现“两步流程”的另一种方式)。
[HttpPost]
public ActionResult CreateArticle(ImagesUploadModel dataFromUser)
{
    if (ModelState.IsValid)
    {
        // Use dataFromUser.File1 and dataFromUser.File2 directly here
    }
    return RedirectToAction("index");
}