asp.net-mvc – MVC:如何将文件上传和其他表单字段发布到一个操
发布时间:2020-12-15 18:46:52 所属栏目:asp.Net 来源:网络整理
导读:我正在创建一个DocumentController的文档库应用程序,需要在库中上传每个doument的缩略图。我想将文件上传字段保留在与其他字段(标题,说明,类别ID等)相同的创建/编辑表单上。 问题是我不确定是否可以混合或嵌套表单标签 Html.BeginForm("Create","Document
我正在创建一个DocumentController的文档库应用程序,需要在库中上传每个doument的缩略图。我想将文件上传字段保留在与其他字段(标题,说明,类别ID等)相同的创建/编辑表单上。
问题是我不确定是否可以混合或嵌套表单标签 Html.BeginForm("Create","Document",FormMethod.Post,enctype = "multipart/form-data") 和 Html.BeginForm() 我的看法如下: <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Publications.WebUI.Models.DocumentEditViewModel >" %> <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> Edit </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <fieldset> <legend>Edit <%= Html.Truncate(Model.Document.Title,50)%></legend> <%= Html.ValidationSummary(false) %> <% using (Html.BeginForm()) { %> <div class="editor-label"> <%= Html.LabelFor(model => model.Document.Title) %> </div> <div class="editor-field"> <%= Html.HiddenFor(model => model.Document.DocumentId ) %> <%= Html.ValidationMessageFor(model => model.Document.Title) %> <%= Html.TextBoxFor(model => model.Document.Title)%> </div> <div class="editor-label"> <%= Html.LabelFor(model => model.Document.DocumentUrl)%> </div> <div class="editor-field"> <%= Html.ValidationMessageFor(model => model.Document.DocumentUrl)%> <%= Html.TextBoxFor(model => model.Document.DocumentUrl)%> </div> <div class="editor-label"> <%= Html.LabelFor(model => model.Document.Description)%> </div> <div class="editor-field"> <%= Html.ValidationMessageFor(model => model.Document.Description)%> <%= Html.TextAreaFor(model => model.Document.Description) %> </div> <div class="editor-label"> <%= Html.LabelFor(model => model.Document.ThumbnailUrl )%> </div> <div class="editor-field"> <% using (Html.BeginForm("Create",new { enctype = "multipart/form-data" })) {%> <%= Html.ValidationMessageFor(model => model.Document.ThumbnailUrl )%> <input name="uploadFile" type="file" /> <% } %> </div> <div class="formActions"> <div class="backNav"> <%= Html.ActionLink("< Back to List","Index") %> </div> <div class="submit"> <input type="submit" value="Save" /> </div> <% } %> </div> </fieldset> </asp:Content> 我的控制器只需要使用Document模型和HttpPostedFileBase,并尝试将文件上传到服务器并将文档保存到存储库 [HttpPost] public ActionResult Create(Document document,HttpPostedFileBase uploadFile) { if (ModelState.IsValid) { //Process file upload //Update repository } return View("List"); } 所以我想知道是否可以做同样的操作的文件上传和更新存储库,我应该如何构造我的视图来促进这一点。 解决方法
我看过史蒂夫·桑德森的伟大的书(Pro ASP.NET MVC 2框架),他的运动商店示例应用程序有一个文件上传表单,其中有标准的表单元素与文件上传“multipart / form-data”元素混合。因此,页面上所有表单元素的多部分类型就足够了。虽然上传的图像被保存在数据库中我确信我可以在同一个Action中执行一个file.SaveAs()。感谢桑德森先生。希望你不介意我复制代码…
视图 <asp:Content ContentPlaceHolderID="MainContent" runat="server"> <h1>Edit <%= Model.Name %></h1> <% using (Html.BeginForm("Edit","Admin",new { enctype = "multipart/form-data" })) { %> <%= Html.Hidden("ProductID") %> <p> Name: <%= Html.TextBox("Name") %> <div><%= Html.ValidationMessage("Name") %></div> </p> <p> Description: <%= Html.TextArea("Description",null,4,20,null) %> <div><%= Html.ValidationMessage("Description") %></div> </p> <p> Price: <%= Html.TextBox("Price") %> <div><%= Html.ValidationMessage("Price") %></div> </p> <p> Category: <%= Html.TextBox("Category") %> <div><%= Html.ValidationMessage("Category") %></div> </p> <p> Image: <% if(Model.ImageData == null) { %> None <% } else { %> <img src="<%= Url.Action("GetImage","Products",new { Model.ProductID }) %>" /> <% } %> <div>Upload new image: <input type="file" name="Image" /></div> </p> <input type="submit" value="Save" /> <%=Html.ActionLink("Cancel and return to List","Index") %> <% } %> </asp:Content> 控制器 [AcceptVerbs(HttpVerbs.Post)] public ActionResult Edit(Product product,HttpPostedFileBase image) { if (ModelState.IsValid) { if (image != null) { product.ImageMimeType = image.ContentType; product.ImageData = new byte[image.ContentLength]; image.InputStream.Read(product.ImageData,image.ContentLength); } productsRepository.SaveProduct(product); TempData["message"] = product.Name + " has been saved."; return RedirectToAction("Index"); } else // Validation error,so redisplay same view return View(product); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- [MethodImpl(MethodImplOptions.Synchronized)]、lock(this
- asp.net-core – 为什么默认的mvc6模板针对多个DNX版本?
- asp.net-mvc-4 – Azure计算模拟器中MVC4 Web API runnin中
- asp.net – 如何使用Linq获取XML元素的值,即使是空的
- asp.net-mvc-3 – 此版本的SQL Server不支持没有聚集索引的
- asp.net-mvc-routing – 在.NET MVC 4.0 URL结构中强制使用
- asp.net-mvc – 如何在验证集合中添加验证错误asp.net mvc?
- ASP.NET rdlc,外部图像不显示PDF格式的图像
- asp.net-mvc – ASP.NET MVC – 从URL中删除控制器名称
- asp.net-mvc – 将ASP.NET MVC布局应用于Jquery.Mobile页面
推荐文章
站长推荐
- 如何在asp.net c#中计算网站访问者数量
- asp.net-mvc – ASP.NET MVC 5和HTML 5根据W3C规
- asp.net-mvc – ASP.NET MVC SiteMap提供程序-Ra
- asp.net-mvc-2 – ASP.NET MVC2 ModelMetadataPr
- 为什么私有事件处理程序在ASP.NET中不起作用
- 本地化 – MVC 3中DataAnnotations的默认错误消息
- asp.net – ServiceReference是一个自托管的WCF服
- ASP.NET EF错误:11007未映射实体类型
- asp.net – 如何使用Eval在数据绑定控件中调用扩
- asp.net-mvc – ASP.Net [HiddenInput]数据属性在
热点阅读