Сильно типизированная модель: как мне работать с выпадающими списками? - PullRequest
0 голосов
/ 05 января 2012

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

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.

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

Ответы [ 2 ]

1 голос
/ 05 августа 2012

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

 <div class="input">
        @Html.DropDownListFor(x => x.HeaderImage,
           new SelectList(Model.HeaderImageList, "Value", "Text"))
   </div>
0 голосов
/ 05 августа 2012

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

<div class="input">
    @Html.DropDownListFor(x => x.HeaderImage, Model.GetHeaderImages())
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...