2012-01-04 2 views
0

Я создал частичный вид, представляющий административную часть блога. В моей модели я создал свойство и метод, показанные ниже.Сильно типизированная модель: как обрабатывать выпадающие списки?

public int HeaderImage { get; set; } 

public IEnumerable<SelectListItem> GetHeaderImages() 
{ 
    List<SelectListItem> d = new List<SelectListItem>(); 

    using (SqlConnection connection = new SqlConnection(
     ConfigurationManager.ConnectionStrings["KineticBombardment"].ToString())) 
    { 
     using (SqlCommand cmd = new SqlCommand("select id, imagepath from blogheaderimages", 
      connection)) 
     { 
      cmd.Parameters.Clear(); 
      connection.Open(); 
      cmd.ExecuteNonQuery(); 

      using (SqlDataReader reader = cmd.ExecuteReader()) 
      { 
       while(reader.Read()) 
       { 
        SelectListItem item = new SelectListItem(); 
        item.Text = reader["id"].ToString(); 
        item.Value = reader["imagepath"].ToString(); 

        d.Add(item); 
       } 
      } 

      return d; 
     } 
    } 
} 

Вид:

<div class="input"> 
    @Html.DropDownListFor(x => x.HeaderImage, 
     new SelectList(Model.HeaderImageList)) 
</div> 

Теперь вся цель состояла в том, чтобы использовать GetHeaderImages() для создания списка, а затем сохранить выбранное значение в HeaderImage собственности и в конечном счете спасти к БД. Прямо сейчас, список выбора отображает, но вместо отображения текстовых значений он отображает весь объект System.Web.MVC.SelectListItem.

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

+0

PLS голосуйте, если ответ вам помог – mattematico

ответ

1

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

<div class="input"> 
     @Html.DropDownListFor(x => x.HeaderImage, 
      new SelectList(Model.HeaderImageList, "Value", "Text")) 
    </div> 
0

Не создавайте список выбора. Он просто ожидает пунктов:

<div class="input"> 
    @Html.DropDownListFor(x => x.HeaderImage, Model.GetHeaderImages()) 
</div> 
Смежные вопросы