Question

Ok, je l'ai été en cours dans ce domaine depuis plusieurs heures et je ne peux pas trouver la solution.

Je veux obtenir des données de mon utilisateur. Alors d'abord, j'utilise un contrôleur pour créer une vue qui reçoit un modèle:

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

Alors, j'ai la vue:

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

et enfin - le contrôleur d'origine, mais cette fois configuré pour accepter les données:

   [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;
            }

Le reste de ce contrôleur n'a pas d'importance car peu importe ce que je fais, l'attribut count de Request.Files (ou Request.Files.Keys) reste à 0. Je ne peux tout simplement pas trouver un moyen de transmettre les fichiers de la forme (le modèle passe juste fine).

Était-ce utile?

La solution

Vous voudrez peut-être envisager de ne pas afficher les fichiers avec le reste de la form- il y a de bonnes raisons et d'autres moyens vous pouvez obtenir ce que vous voulez.

En outre, consultez cette question et ce conseil en ce qui concerne le téléchargement de fichiers dans MVC.

Autres conseils

Vous pouvez ajouter les fichiers à votre modèle de vue:

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

Et puis:

[HttpPost]
public ActionResult CreateArticle(ImagesUploadModel dataFromUser)
{
    if (ModelState.IsValid)
    {
        // Use dataFromUser.File1 and dataFromUser.File2 directly here
    }
    return RedirectToAction("index");
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top