asp.net-mvc – MVC:如何将文件上传和其他表单字段发布到一个操作
发布时间:2020-05-23 11:43:24 所属栏目:asp.Net 来源:互联网
导读:我正在创建一个DocumentController的文档库应用程序,需要在库中上传每个doument的缩略图。我想将文件上传字段保留在与其他字段(标题,说明,类别ID等)相同的创建/编辑表单上。 问题是我不确定是否可以混合或嵌套表单标签 Html.BeginForm(Create, Document, F
|
我正在创建一个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);
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 如何从ASP .NET网站检测客户端上安装的Java运行时?
- asp.net-mvc – ASP.NET MVC视图模型命名约定
- 如何在ASP.NET页面上使用框架?
- 在ASP.NET Core 2.0 / Angular模板应用程序上发布失败
- ASP.Net WebAPI与Ajax进行跨域数据交互时Cookies数据的传递
- asp.net-mvc-3 – 可以添加到显示/ EditorTemplates ASP.NE
- ASP.NET Web App和ASP.NET MVC 3 Empty Web App之间的区别?
- asp.net-mvc – Visual Studio 2010 Web发布缺少一个文件
- ASP.NET网站Windows窗体应用程序WCF服务:客户端凭据
- asp.net-core – ASP.NET Core App中project.json中的build
推荐文章
站长推荐
- asp.net – 额外的文件夹附加到我的Web根目录在A
- ASP.net缓存绝对到期不工作
- 缺少版本和工具:.NET Core,Core Tools,dotnet C
- asp.net – 超过了JavaScriptSerializer.MaxJson
- asp.net-mvc – ASP.NET MVC路由问题
- asp.net-mvc-4 – MVC4/DotNetOpenAuth中的自定义
- asp.net – BC30560:’ExtensionAttribute’在名
- asp.net – 要解决的JavaScript难题:window.con
- asp.net – 在.NET Core 1.0 MVC中的视图中使用授
- asp.net-mvc-5 – 如何让Glimpse与EF6合作?
热点阅读
