Tengo una carga de formulario que funciona, pero me gustaría pasar la información del modelo para mi base de datos para guardar el archivo con un nombre diferente, por supuesto.
Aquí está mi vista de Razor:
@model CertispecWeb.Models.Container
@{
ViewBag.Title = "AddDocuments";
}
<h2>AddDocuments</h2>
@Model.ContainerNo
@using (Html.BeginForm("Uploadfile", "Containers", FormMethod.Post,
new { enctype = "multipart/form-data" }))
{
<input type='file' name='file' id='file' />
<input type="submit" value="submit" />
}
Aquí está mi controlador:
[HttpPost]
public ActionResult Uploadfile(Container containers, HttpPostedFileBase file)
{
if (file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/App_Data/Uploads"),
containers.ContainerNo);
file.SaveAs(path);
}
return RedirectToAction("Index");
}
La información del modelo no se transmite al controlador. He leído que es posible que necesite actualizar el modelo, ¿cómo lo haría?
asp.net-mvc
asp.net-mvc-3
razor
Francis
fuente
fuente
Respuestas:
Su formulario no contiene ninguna etiqueta de entrada que no sea el archivo, por lo que en la acción de su controlador no puede esperar obtener nada más que el archivo cargado (eso es todo lo que se envía al servidor). Una forma de lograr esto sería incluir una etiqueta oculta que contenga la identificación del modelo que le permitirá recuperarlo de su almacén de datos dentro de la acción del controlador en la que está publicando (use esto si se supone que el usuario no debe modificar el modelo pero simplemente adjunte un archivo):
y luego en la acción de su controlador:
Por otro lado, si desea permitir que el usuario modifique este modelo, deberá incluir los campos de entrada adecuados para cada campo de su modelo que desee que se envíe al servidor:
y luego tendrá el encuadernador de modelos predeterminado reconstruir este modelo a partir de la solicitud:
fuente
file
comonull
yRequest.Files.Count
es 0, ¿habría alguna diferencia si elform
es unAjaxForm
y también hayrouteValues
?Resuelto
Modelo
Controlador
Y ver
Tenga en cuenta que el título del parámetro de la acción del controlador debe coincidir con el nombre de los elementos de entrada
IEnumerable<HttpPostedFileBase> fileUpload
->name="fileUpload[0]"
fileUpload
debe coincidir confuente
Si no siempre publicará imágenes en su acción, puede hacer algo como esto:
fuente
Para varios archivos; tenga en cuenta el atributo " múltiple " más nuevo para la entrada:
Formar:
Controlador:
fuente
Primera descarga del archivo jquery.form.js desde la siguiente URL
http://plugins.jquery.com/form/
Escriba el código a continuación en cshtml
Método de acción: -
fuente