2010-07-06 5 views
0

En bref, j'essaie d'ajouter quelques éléments supplémentaires à ViewData pour me faciliter la vie, et c'est un boîtier qui ne justifie pas vraiment son propre modèle juste pour ce cas unique. Continuez à lire pour plus de détails spécifiques. J'ai donc une vue d'édition fortement typée pour un de mes objets, tout fonctionne bien jusqu'à ce que j'essaie de mettre une liste déroulante sur la vue avec un ID qui ne correspond pas à une propriété de ma classe.ASP.NET MVC Vue fortement typée avec DropDownList

Je possède ce

public class MyModel 
{ 
    public String Name {get;set;} 
    public int ID {get;set;} 
    public MyOtherModel Other {get;set;} 
} 
public class MyOtherModel 
{ 
    public String Name {get;set;} 
    public int ID {get;set;} 
} 

Je suis en mesure de mettre à jour la propriété Name.

Je voudrais également définir la propriété Other.ID à partir d'un DropDownList, mais il ne me laisse pas faire cela.

Mon contrôleur ressemble à ceci

public ActionResult EditView() 
{ 
    var da = new DataAccessClass(); 
    var Names = da.ReadActive(); // returns MyOtherModel 
    var sli = new SelectList(evNames, "ID", "Name"); 
    ViewData["OtherModelNames"] = sli; 
    return View(); 
} 

Mon Voir ressemble à ceci:

<p> 
    <label for="EndTime">Name:</label> 
    <%= Html.TextBox("Name") %> 
    <%= Html.ValidationMessage("Name", "*")%> 
</p> 
<p> 
    <label for="EndTime">Other Name:</label> 
    <%= Html.DropDownList("OtherNameIDList", (SelectList)ViewData["OtherModelNames"]) %> 
    <%= Html.ValidationMessage("OtherNameIDList", "*")%> 
</p> 

Je reçois une erreur sur cette ligne <%= Html.DropDownList("OtherNameIDList", (SelectList)ViewData["Names"]) %>

« Il n'y a aucun élément ViewData avec la clé 'OtherNameIDList' de type 'IEnumerable'. "

Mon attente est que dans l'action du contrôleur qui accepte le POST, j'utiliserai manuellement le FormCollection [] pour lire cet ID et remplir MyOtherModel avec l'ID correct.

+0

Un problème est que vous définissez ViewData ["OtherModelNames"] dans votre action mais attendez ViewData ["Noms"] dans votre affichage. – Tahbaza

+0

Merci, j'ai corrigé ça, c'était une faute de frappe de rendre la question anonyme. ;) – Nate

Répondre

1

Dans le essai du contrôleur:

public ActionResult EditView() 
{ 
    var da = new DataAccessClass(); 
    var Names = da.ReadActive(); // returns MyOtherModel 
    var sli = new SelectList(evNames, "ID", "Name"); 
    ViewData.Add("OtherModelNames", new SelectList("ID", "Name", "")); 
    return View(); 
} 

La dans la vue

Html.DropDownList("OtherModelNames") 

Pour obtenir le Other.Id dans le dropdownlist, il suffit de créer un int statique dans la classe:

public static int OtherId {get { return this.Other.Id; }} 
Questions connexes