J'ai un téléchargement de formulaire qui fonctionne mais je voudrais transmettre des informations de modèle pour ma base de données pour enregistrer le fichier sous un nom différent bien sûr.
Voici ma vue 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" />
}
Voici mon contrôleur:
[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");
}
Les informations du modèle ne sont pas transmises au contrôleur. J'ai lu que je pourrais avoir besoin de mettre à jour le modèle, comment dois-je procéder?
asp.net-mvc
asp.net-mvc-3
razor
Francis
la source
la source
Réponses:
Votre formulaire ne contient aucune balise d'entrée autre que le fichier, donc dans l'action de votre contrôleur, vous ne pouvez pas vous attendre à obtenir autre chose que le fichier téléchargé (c'est tout ce qui est envoyé au serveur). Une façon d'y parvenir serait d'inclure une balise cachée contenant l'id du modèle qui vous permettra de le récupérer à partir de votre banque de données à l'intérieur de l'action du contrôleur sur laquelle vous publiez (utilisez ceci si l'utilisateur n'est pas censé modifier le modèle mais joindre simplement un fichier):
puis dans l'action de votre contrôleur:
Par contre, si vous souhaitez autoriser l'utilisateur à modifier ce modèle, vous devrez inclure les champs de saisie appropriés pour chaque champ de votre modèle que vous souhaitez envoyer au serveur:
puis vous aurez le classeur de modèle par défaut reconstruire ce modèle à partir de la demande:
la source
file
aussinull
etRequest.Files.Count
est 0, y aurait-il une différence si leform
est unAjaxForm
et il yrouteValues
en a aussi?Résolu
Modèle
Manette
Et vue
Notez que le titre du paramètre de l'action du contrôleur doit correspondre au nom des éléments d'entrée
IEnumerable<HttpPostedFileBase> fileUpload
->name="fileUpload[0]"
fileUpload
doit correspondrela source
Si vous n'avez pas toujours des images postées à votre action, vous pouvez faire quelque chose comme ceci:
la source
Pour plusieurs fichiers; notez le nouvel attribut " multiple " pour l'entrée:
Forme:
Manette:
la source
1er téléchargement du fichier jquery.form.js à partir de l'url ci-dessous
http://plugins.jquery.com/form/
Écrivez ci-dessous le code en cshtml
Méthode d'action: -
la source