强类型模型:如何处理下拉列表?

时间:2012-01-04 21:29:33

标签: c# asp.net-mvc model html-select

我创建了一个代表博客管理员端的部分视图。在我的模型中,我创建了一个属性和方法,如下所示。

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 个答案:

答案 0 :(得分:1)

你做得对,但你必须告诉下拉列表哪个字段显示为文本,并将其作为值。

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

答案 1 :(得分:0)

不要创建选择列表。它只是期望这些项目:

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