这是我第一次尝试使用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"));
答案 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"] );