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