2010-07-28 10 views
0

J'ai la structure de tableau suivant:Aidez-moi à créer une liste déroulante de tous les Jefes dans ma base de données!

alt text

Je suis en train de remplir une zone de liste déroulante de tous les Jefes lors de l'édition d'une zone. Ce qui signifie que je peux changer qui est en charge d'une zone.

Voici mon code AreaController.cs:

public ActionResult Edit(int id) 
     { 
      Area area = areaRepository.GetArea(id); 
      JefeRepository jefe = new JefeRepository();   
      ViewData["Jefes"] = new SelectList(jefe.FindAllJefes(), "Nombre", "Nombre"); 
      return View(area); 
     } 

     [AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult Edit(int id, FormCollection formValues) 
     { 
      Area area = areaRepository.GetArea(id); 

      try 
      { 
       UpdateModel(area); 
       areaRepository.Save(); 

       return RedirectToAction("Details", new { id = area.ID }); 

      } 
      catch (Exception) 
      { 
       foreach (var issue in area.GetRuleViolations()) 
       { 
        ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage); 
       } 
       return View(area); 
      } 
     } 

Notez que .FindAllJefes() retourne une <> collection IQueryable.

Maintenant, dans mon fichier Edit.aspx je donne les résultats suivants:

<fieldset> 
      <legend>Informacion Detallada de Area | <%: Model.Nombre %></legend> 

      <div class="editor-label"> 
       <%: Html.LabelFor(model => model.Nombre) %> 
      </div> 
      <div class="editor-field"> 
       <%: Html.TextBoxFor(model => model.Nombre) %> 
       <%: Html.ValidationMessageFor(model => model.Nombre) %> 
      </div> 

      <div class="editor-label"> 
       <%: Html.LabelFor(model => model.IDJefe) %> 
      </div> 
      <div class="editor-field"> 
       <%: Html.DropDownList("IDJefe", (SelectList)ViewData["Jefes"], "(Select Jefe)") %>     
       <%: Html.ValidationMessageFor(model => model.IDJefe) %> 
      </div> 

      <p> 
       <input type="submit" value="Save" /> 
      </p> 
     </fieldset> 

Je reçois cette erreur:

There is no ViewData item of type 'IEnumerable' that has the key 'IDJefe'.

+1

Jefe = chef/chef :) – Ahmad

Répondre

0

par MSDN:

new SelectList(jefe.FindAllJefes(), "Nombre", "Nombre"); 

jefe.FindAllJefes() devrait être un IEnumerable lorsqu'il est passé à un ctor SelectList. Votre argument devrait lire jefe.FindAllJefes().ToList()

0

Sans voir comment vos classes personnalisées sont conçues, c'est dur, mais juste une supposition:

ViewData["Jefes"] = new SelectList(jefe.FindAllJefes(), "Nombre", "Nombre") 

Je ne sais pas comment votre classe SelectList est configuré , mais (peut-être) vous utilisez "Nombre" comme ID ET la valeur d'affichage (???). Votre liste de sélection recherche donc une clé appelée "IDJefe", et ne la trouve pas, car vous avez utilisé "Nombre" deux fois.

<div class="editor-field"> 
     <%: Html.DropDownList("IDJefe", (SelectList)ViewData["Jefes"], "(Select Jefe)") %>     
     <%: Html.ValidationMessageFor(model => model.IDJefe) %> 
    </div> 
Questions connexes