从List<>填充下拉列表采集

时间:2015-04-27 17:43:11

标签: c# asp.net-mvc razor

这是我第一次尝试使用List<>填充下拉列表采集。我不太确定我这样做是对的,所以任何指示都会很棒。我不认为我在视图中的列表中获得了正确的信息吗?

我的模型看起来像:

public List<LOB> LOBTypes
        {
            get
            {
                try
                {
                    using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MNB_connectionstring"].ConnectionString))
                    {
                        SqlCommand cmd = new SqlCommand("SELECT CODE, NAME FROM BOA_LOB_Details ORDER BY NAME", con);
                        cmd.CommandType = CommandType.Text;

                        SqlDataReader dr = cmd.ExecuteReader();

                        if (dr.HasRows)
                        {
                            while (dr.Read())
                            {
                                _LOBTypes.Add(new LOB { Code = dr["CODE"].ToString(), Name = dr["NAME"].ToString() });
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    ExceptionUtility.LogException(ex, "GetLOBTypes()");
                }
                return _LOBTypes;
            }

        }

我的观点包含:

        @Html.Label("Product Type: *");
        @Html.DropDownListFor(m => m.LOBTypes, new SelectList(Model.LOBTypes, "NAME"));

1 个答案:

答案 0 :(得分:1)

你有DropDownListFor错误方法的论据。

第一个参数应该是存储所选值的ViewModel属性。 第二个参数应该是SelectListItem的列表,它将作为用户的选项显示。如果它来自数据库,则应该作为ViewData而不是ViewModel的属性传递。

此外,您没有正确处理数据库对象。

这样的事情:

List<SelectListItem> items = new List<SelectListItem>();
while( dr.Read() ) {

    SelectListItem li = new SelectListItem() {
        Text = dr.GetString("NAME"),
        Value = dr.GetString("CODE")
    };
    items.Add( li );
}
ViewData["ListItems"] = items;

////

@Html.DropDownListFor( m => m.LOBTypes, this.ViewData["ListItems"] );