91 votes

Upload de fichier MVC 3 et liaison du modèle

J’ai un formulaire upload qui fonctionne, mais je tiens à transmettre des informations de modèle pour ma base de données enregistrer le fichier sous un nom différent, bien sûr.

Voici mon avis rasoir :

Voici mon contrôleur :

Les informations de modèle ne sont pas transmises au contrôleur. J’ai lu que je pourrais avoir besoin de mettre à jour le modèle, comment puis-je faire cela ?

123voto

Darin Dimitrov Points 528142

Votre formulaire ne contient pas de balise d'entrée autre que le fichier dans votre contrôleur de l'action ne vous attendez pas à obtenir quoi que ce soit d'autre que le fichier téléchargé (c'est tout ce qui est envoyée au serveur). Une façon d'y parvenir serait d'ajouter un tag caché contenant l'id du modèle qui vous permettra de le récupérer à partir de votre magasin de données à l'intérieur du contrôleur de l'action que vous postez (à utiliser si l'utilisateur n'est pas censé modifier le modèle, mais il suffit de joindre un fichier):

@using (Html.BeginForm("Uploadfile", "Containers", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.HiddenFor(x => x.Id)
    <input type="file" name="file" id="file" />
    <input type="submit" value="submit" />
}

et puis dans votre contrôleur de l'action:

[HttpPost]
public ActionResult Uploadfile(int id, HttpPostedFileBase file)
{
    Containers containers = Repository.GetContainers(id);
    ...
}

D'autre part, si vous voulez autoriser l'utilisateur à modifier ce modèle, alors vous aurez besoin de comprendre le champs de saisie pour chaque domaine de votre modèle que vous souhaitez envoyer au serveur:

@using (Html.BeginForm("Uploadfile", "Containers", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.TextBxFor(x => x.Prop1)
    @Html.TextBxFor(x => x.Prop2)
    @Html.TextBxFor(x => x.Prop3)
    <input type="file" name="file" id="file" />
    <input type="submit" value="submit" />
}

et puis vous avez le modèle de classeur par défaut reconstruire ce modèle à partir de la demande:

[HttpPost]
public ActionResult Uploadfile(Container containers, HttpPostedFileBase file)
{
    ...
}

8voto

Mikhail Points 1033

Résolu

Modèle

Contrôleur de

Et vue

Note titre du paramètre d’action de contrôleur doit correspondre avec le nom des éléments input ->

``doit correspondre à

6voto

jhatcher9999 Points 81

Si vous n’aurez toujours images poster à votre action, vous pouvez faire quelque chose comme ceci :

1voto

mcfea Points 87

Pour plusieurs fichiers ; Remarque l’attribut «multiples» plus récent pour l’entrée :

Forme :

Contrôleur :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X