2010-12-13 2 views
1

Хорошо, я знаю, что мне не хватает чего-то настоящего простого, поэтому, возможно, дополнительный набор глаз поможет. У меня есть класс POCO (State) в моем DAL, и в моем приложении MVC я пытаюсь связать это с DropDownList, но когда он загружает все, что я получаю, это WeddingPhotographer.Models.BusinessObjects.State в моем DropDownList 50 раз , Вот код из класса POCO:Привязать к DropDownList в MVC 2

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

    public virtual string StateAbbreviation 
    { 
     get; 
     set; 
    } 

    public virtual string StateName 
    { 
     get; 
     set; 
    } 

} 

Вот код из моего бизнес-объекта (срок использования слегка)

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; 
     } 
    } 
} 

Тогда мои состояния DropDownList управления

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

И, наконец, как я его загружаю

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

Я знаю, что я пропускаю что-то просто здесь (относительно нового MVC так до сих пор пытаюсь получить все правильно)

ответ

1

Отменить изменение, которое вы делали ранее. Из-за того, что вы используете статический список, сколько раз вы используете этот элемент управления за один шанс?

Бьюсь об заклад, если вы выполнили нулевую проверку в списке перед ее загрузкой и добавили только значения, если список равен нулю, он устранит вашу проблему.

+0

Я не совсем уверен, что понимаю что вы говорите – PsychoCoder

+0

Вы имеете в виду, если список * NOT * null? Добавляйте только элементы в свой список выбора, которые не равны нулю, а затем, когда вы привязываетесь к вашему списку выбора, у вас нет нулевых элементов, поскольку все они были отмечены перед их добавлением в список выбора. – BenAlabaster

1

вам нужно иметь перечисление SelectListItem для заполнения элементов из выпадающего списка.

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))%> 

Вы можете использовать любые значения для текста/значения, но является обычной практикой при работе с государствами является использование аббревиатуры для значения и имени для текста, но если ваше приложение будет работать лучше это состояние Key, тогда это нормально использовать.

+0

Спасибо, я предполагаю, что это то, что мне не хватало, но теперь я 'm получает исключение NullReferenceException в этой строке _ <%: Html.DropDownList («StatesDropDown», новый SelectList (WeddingPhotographer.Helpers.StateList.States, Model.StateAbbreviation))%> _ – PsychoCoder

0

Я взял совет @ SyntaxC4 и вернулся к использованию IEnumerable, но получал исключение NullReferenceException всякий раз, когда я пытался загрузить DropDownList в моем представлении. Я изменил свой контроль DropDownList, чтобы посмотреть, как это и теперь он работает отлично

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

Спасибо @ SyntaxC4 и @BenAlabaster за вашу помощь в электронной почте, а

Смежные вопросы