2010-12-13 16 views
1

Ok, je sais qu'il me manque quelque chose de vraiment simple ici, donc peut-être qu'un ensemble supplémentaire d'yeux aidera. J'ai une classe POCO (State) dans mon DAL, et dans mon application MVC j'essaye de lier cela à un DropDownList, mais quand il charge tout ce que je reçois est WeddingPhotographer.Models.BusinessObjects.State dans mon DropDownList 50 fois . Voici le code de la classe POCO:Lier à DropDownList dans MVC 2

public partial class State 
{ 
    public virtual int Key 
    { 
     get; 
     set; 
    } 

    public virtual string StateAbbreviation 
    { 
     get; 
     set; 
    } 

    public virtual string StateName 
    { 
     get; 
     set; 
    } 

} 

est ici le code de mon Business Object (utilisation terme légèrement)

public class State 
{ 
    public int Key { get; set; } 
    public string StateName { get; set; } 
    public string StateAbbreviation { get; set; } 
} 

public class StateList 
{ 
    private static IRepository<WeddingPhotographer.Data.Model.State> states = ObjectFactory.GetInstance<IRepository<WeddingPhotographer.Data.Model.State>>(); 
    static readonly IList<State> stateList = new List<State>(); 

    public static IEnumerable<State> States 
    { 
     get 
     { 
      foreach (WeddingPhotographer.Data.Model.State s in states.GetAll()) 
      { 
       stateList.Add(new State 
       { 
        Key = s.Key, 
        StateName = s.StateName, 
        StateAbbreviation = s.StateAbbreviation 
       }); 
      } 
      return stateList; 
     } 
    } 
} 

Alors mes états DROPDOWNLIST contrôle

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<WeddingPhotographer.Models.BusinessObjects.State>" %> 
<%: Html.DropDownList("StatesDropDown", new SelectList(WeddingPhotographer.Helpers.StateList.States,Model))%> 

Et enfin comment je le charge

<div class="editor-field"> 
    <% Html.RenderPartial("StatesDropDown"); %> 
    <%= Html.ValidationMessageFor(m => m.State) %> 
</div> 

Je sais que je manque quelque chose de simple ici (relativement nouveau pour MVC donc toujours essayer de faire avancer les choses à droite)

Répondre

1

Annule la modification que vous avez effectuée précédemment. Étant donné que vous utilisez une liste statique, combien de fois utilisez-vous ce contrôle par hasard? Je parie que si vous avez fait une vérification nulle sur la liste avant de le charger et que vous ajoutez des valeurs seulement si la liste est nulle cela résoudrait votre problème.

+0

Je ne suis pas certain de comprendre ce que vous dites – PsychoCoder

+0

Voulez-vous dire si la liste est * NOT * null? Ajoutez uniquement des éléments dans votre liste de sélection qui ne sont pas null, puis lorsque vous vous connectez à votre liste de sélection, aucun élément null n'y figure car ils ont tous été vérifiés avant de les ajouter à la liste de sélection. – BenAlabaster

1

vous devez avoir une énumération des SelectListItem pour remplir les éléments dans le menu déroulant.

public class StateList 
{ 
    private static IRepository<WeddingPhotographer.Data.Model.State> states = ObjectFactory.GetInstance<IRepository<WeddingPhotographer.Data.Model.State>>(); 
    static readonly IList<SelectListItem> stateList = new List<SelectListItem>(); 

    public static IEnumerable<SelectListItem> States 
    { 
     get 
     { 
      foreach (WeddingPhotographer.Data.Model.State s in states.GetAll()) 
      { 
       stateList.Add(new SelectListItem 
       { 
        Text = s.StateName, 
        Value = s.StateAbbreviation 
       }); 
      } 
      return stateList; 
     } 
    } 
} 

<%: Html.DropDownList("StatesDropDown", new SelectList(WeddingPhotographer.Helpers.StateList.States,Model.StateAbbreviation))%> 

Vous pouvez utiliser les valeurs souhaitées pour le texte/valeur, mais une pratique courante lorsque l'on travaille avec les Etats est d'utiliser l'abréviation de la valeur et le nom du texte, mais si votre application fonctionnerait mieux avec cette clé d'état, alors il est parfaitement acceptable de l'utiliser.

+0

Merci, je pense que ce que je manquais, mais maintenant je Obtenir une exception NullReferenceException sur cette ligne _ <%: Html.DropDownList ("StatesDropDown", nouvelle liste SelectList (WeddingPhotographer.Helpers.StateList.States, Model.StateAbbreviation))%> _ – PsychoCoder

0

J'ai suivi le conseil de @ SyntaxC4 et j'ai recommencé à utiliser IEnumerable mais recevait une exception NullReferenceException chaque fois que j'essayais de charger DropDownList dans ma vue. J'ai changé mon contrôle DropDownList pour ressembler à ceci et il fonctionne maintenant parfaitement

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<WeddingPhotographer.Models.BusinessObjects.State>" %> 
<%: Html.DropDownList("StatesDropDown", new SelectList(WeddingPhotographer.Helpers.StateList.States, "Key", "StateAbbreviation"))%> 

Merci @ SyntaxC4 et @BenAlabaster pour votre aide dans le courrier électronique et