2017-10-18 10 views
0

J'utilise le tutoriel simple this pour télécharger un fichier dans mon projet MVC5 C# VS2015, et sans nécessiter de paramètres supplémentaires dans l'action des contrôleurs, le fichier est téléchargé avec succès. Voici des contrôleurs d'actionMVC 5 Téléchargement de fichier (POST) avec un paramètre supplémentaire

[HttpPost] 
    public string UploadFile(HttpPostedFileBase file) 
    { 
     if (file.ContentLength <= 0) 
      throw new Exception("Error while uploading"); 

     string fileName = Path.GetFileName(file.FileName); 
     string path = Path.Combine(Server.MapPath("~/Uploaded Files"), fileName); 
     file.SaveAs(path); 
     return "Successfuly uploaded"; 
    } 


et la forme de vue pour le téléchargement

@using (Html.BeginForm("UploadFile", "Documents", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    @Html.TextBox("file", "", new { type = "file" }) 
    <input type="submit" value="Dodaj fajl" /> 
} 

Dans ce point de vue, j'ai une autre variable appelée DocumentNumber, que je dois passer à l'action UploadFile. Je devine seulement que l'en-tête de mon action ressemblerait à ceci: public string UploadFile(HttpPostedFileBase file, int docNo) si je voulais passer cette variable, mais je ne sais pas non plus comment définir cette valeur dans le formulaire de la vue. J'ai essayé d'ajouter: new { enctype = "multipart/form-data", docNo = DocumentNumber } sans succès. Comment puis-je passer de DocumentNumber (qui doit être caché, non visible) de mon point de vue à l'action du contrôleur avec la méthode post?

Répondre

0

Ajouter un paramètre à votre méthode d'action

[HttpPost] 
public string UploadFile(HttpPostedFileBase file,int DocumentNumber) 
{ 

} 

et assurez-vous que votre formulaire a un élément d'entrée avec le même nom. Cela peut être caché ou visible. Lorsque vous soumettez le formulaire, la valeur d'entrée sera envoyée avec le même nom que le nom de l'élément d'entrée, qui correspond à notre nom de paramètre de méthode d'action et donc la valeur sera mappée à cela.

@using (Html.BeginForm("UploadFile", "Documents", FormMethod.Post, 
            new { enctype = "multipart/form-data" })) 
{ 
    @Html.TextBox("file", "", new { type = "file" }) 
    <input type="text" name="DocumentNumber" value="123"/ > 
    <input type="submit" value="Dodaj fajl" /> 
} 

Si vous souhaitez utiliser la valeur de la propriété DocumentNumber de votre modèle, vous pouvez simplement utiliser l'une des méthodes d'aide pour générer l'élément d'entrée avec la valeur (que vous devez définir dans la méthode d'action GET)

@Html.TextBoxFor(s=>s.DocumentNumber) 

ou pour l'élément d'entrée caché

@Html.HiddenFor(s=>s.DocumentNumber)