2013-10-09 5 views
2

Dans mon CreateView jePourquoi mon HttpPostedFileBase est toujours vide?

@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl, FormMethod.Post, enctype = "multipart/form-data" })) 
     { 
      @Html.AntiForgeryToken() 
      @Html.ValidationSummary(true) 

     <div> 
      <h2>New Task</h2> 
      <ol style="list-style-type: none;"> 
       <li> 
        @Html.LabelFor(m => m.Title, htmlAttributes: new { @class = "formlabel" }) 
        @Html.TextBoxFor(m => m.Title) 
        @Html.ValidationMessageFor(m => m.Title) 
       </li> 
       <li> 
        @Html.LabelFor(m => m.Description, htmlAttributes: new { @class = "formlabel" }) 
        @Html.TextAreaFor(m => m.Description) 
        @Html.ValidationMessageFor(m => m.Description) 
       </li> 
       <li> 
        @Html.LabelFor(m => m.Deadline, htmlAttributes: new { @class = "formlabel" }) 
        @Html.TextBoxFor(m => m.Deadline, htmlAttributes: new { id = "date-picker", type = "text", @class = "hasDatepicker" }) 
        @Html.ValidationMessageFor(m => m.Deadline) 
       </li> 
       <li> 
        @Html.LabelFor(m => m.RankID, htmlAttributes: new { @class = "formlabel" }) 
        @Html.DropDownList("RankID", null, htmlAttributes: new { @class = "standselect" }) 
        @Html.ValidationMessageFor(m => m.RankID) 
       </li> 
       <li> 
        @Html.LabelFor(m => m.PriorityID, htmlAttributes: new { @class = "formlabel" }) 
        @Html.DropDownList("PriorityID", null, htmlAttributes: new { @class = "standselect" }) 
        @Html.ValidationMessageFor(m => m.PriorityID) 
       </li> 
       <li> 
        <label for="uploadFile">Files</label> 
        <input type="file" name="uploadFile" id="uploadFile" /> 
       </li> 
       <li style="margin: 20px 0 0 32px;"> 
        <input type="submit" class="ghButton btn btn-navy" value="Create" /> 
       </li> 
      </ol> 
     </div> 
    } 

Dans mon Controller je

 [HttpPost] 
     public ActionResult Create(ETaskModel taskModel, HttpPostedFileBase uploadFile) 
     { 
      var tasksServ = new TasksService(); 

      //var files = Request.Files;//files 
      var upFiles = uploadFile;//up files 

      //returning recently created task 
      DataAccess.Task createdTask; 
      tasksServ.Create(taskModel.Title, taskModel.RankID, SessionHelper.User.ID, taskModel.Deadline, taskModel.Description, taskModel.PriorityID, 
       null, //---------documents 
       null, //implementator users 
       out createdTask); 


      var generalServ = new General(); 
      ViewBag.RankID = new SelectList(generalServ.GetRanks(), "RankID", "RankValue", taskModel.RankID); 
      ViewBag.PriorityID = new SelectList(generalServ.GetPriorities(), "PriorityID", "Name", taskModel.PriorityID); 
      return View(taskModel); 
     } 

Sur soumettre les données que je reçois dans mon objet ETaskModel taskModel. mais HttpPostedFileBase files est toujours vide. Aussi Request.Files.Count est toujours 0;

Quel est mon problème. Est-il possible de télécharger le (s) fichier (s) et de recevoir simultanément les données ETaskModel?

P.S. uploadFile Le nom du fichier téléchargé et le paramètre de la méthode du contrôleur sont les mêmes!

+0

Cette question semble être hors-sujet car il est sur une faute de frappe. – Stijn

Répondre

2

Je pense que vous utilisez une mauvaise version surchargée sur BeginForm

lieu

Html.BeginForm(null, null, FormMethod.Post, new { ReturnUrl = ViewBag.ReturnUrl, enctype = "multipart/form-data" }) 
1

C'est parce que votre paramètre dans votre action doit être nommé uploadFile au lieu de files pour correspondre à la id indiquée sur le formulaire. Ensuite, le fichier sélectionné sera disponible.

+0

Je l'ai changé (juste oublié d'écrire correctement ici - dans stackoverflow) MAIS IL NE FONCTIONNE PAS ENCORE – levi

+0

Michael vous êtes un épargnant de vie !!! – cbillowes

1

Essayez d'ajouter HttpPostedFileBase à votre modèle,

public class ETaskModel 
    { 
     public string Title {get; set;} 
     public string Description{get; set;} 
     . 
     . 
     public HttpPostedFileBase uploadFile {get; set;} 
    } 

et dans votre contrôleur,

 [HttpPost] 
     public ActionResult Create(ETaskModel taskModel) 
     { 
      . 
      . 
     } 

didnt vérifier le code, mais cela pourrait fonctionner, Hope this helps.

+0

non. n'a pas fonctionné – levi

Questions connexes