Estoy creando una aplicación de biblioteca de documentos con DocumentController
que necesita cargar una imagen en miniatura de cada documento en la biblioteca. Quiero mantener el campo Cargar archivo en el mismo formulario Crear/Editar que los demás campos (Título, Descripción, Categoría, etc.).
El problema es que no estoy seguro si puedo mezclar o nido de las etiquetas de formulario paraMVC: Cómo publicar Subida de archivos y otros campos de formulario en una acción
Html.BeginForm("Create", "Document", FormMethod.Post, enctype = "multipart/form-data")
y
Html.BeginForm()
Mi opinión es la siguiente:
<%@ 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", "Document",
FormMethod.Post, 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>
Mi controlador simplemente toma el modelo de documento y HttpPostedFileBase
e intenta cargar el archivo en el servidor y guardar el documento en el repositorio
[HttpPost]
public ActionResult Create(Document document, HttpPostedFileBase uploadFile)
{
if (ModelState.IsValid)
{
//Process file upload
//Update repository
}
return View("List");
}
Así que me pregunto si es posible hacer la carga del archivo y actualizar el repositorio en la misma acción y cómo debería estructurar mi vista para facilitar esto.
creo que el código es correcto. :-) – AEMLoviji
Destaca por cualquier persona tiene la muestra problema: el código de la pregunta original debería funcionar bien, solo una cosa que debe agregarse a su formulario es 'enctype =" multipart/form-data "'. – Jacky