繁体   English   中英

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

[英]Strongly-Typed Model: How do I handle dropdown lists?

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

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对象。

我想我要问的问题是:在模型中(从数据源)构建选择列表,然后用所选值填充该模型中的另一个属性的理想方法是什么?

您做对了,但是您必须告诉下拉列表将哪个字段显示为文本,将哪个字段作为值显示。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM