Pregunta

Ok, he estado yendo en esto durante varias horas y yo simplemente no puede encontrar la solución.

Quiero obtener algunos datos de mi usuario. Así que, primero, yo uso un controlador para crear una vista que recibe un modelo:

public ViewResult CreateArticle()
{
    Article newArticle = new Article();
    ImagesUploadModel dataFromUser = new ImagesUploadModel(newArticle);
    return View(dataFromUser);
}

A continuación, tengo la vista:

<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>

y, finalmente, - el controlador original, pero esta vez configurada para aceptar los datos:

   [HttpPost]
    public ActionResult CreateArticle(ImagesUploadModel dataFromUser)
    {
        if (ModelState.IsValid)
        {
            HttpPostedFileBase[] imagesArr;
            imagesArr = new HttpPostedFileBase[2]; 
            int i = 0;
            foreach (string f in Request.Files)
            {
                HttpPostedFileBase file = Request.Files[f];
                if (file.ContentLength > 0)
                    imagesArr[i] = file;
            }

El resto de este controlador no importa ya que no importa lo que haga, el atributo de count Request.Files (o Request.Files.Keys) sigue siendo 0. Simplemente no puedo encontrar una manera de pasar los archivos de la forma (pasa el modelo solo fina).

¿Fue útil?

Solución

Es posible que desee tener en cuenta no publicar los archivos con el resto de la forma- hay buenas razones y otras formas se puede lograr lo que quiere.

Además, la salida esta pregunta y este consejo con respecto a la carga de archivos en MVC.

Otros consejos

Se podría añadir los archivos a su modelo de vista:

public class ImagesUploadModel
{
    ...
    public HttpPostedFileBase File1 { get; set; }
    public HttpPostedFileBase File2 { get; set; }
}

Y a continuación:

[HttpPost]
public ActionResult CreateArticle(ImagesUploadModel dataFromUser)
{
    if (ModelState.IsValid)
    {
        // Use dataFromUser.File1 and dataFromUser.File2 directly here
    }
    return RedirectToAction("index");
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top