使用NpgsqlDataReader填充DropDownList - 选定值为空

时间:2017-07-27 12:20:10

标签: c# asp.net razor

我正在尝试从DropDownLists填充NpgsqlDataReader。这些列表来自不同的表格。页面正在从“产品表”中加载产品,其中包含“部门表”和“组表”中的列表。问题是页面加载时,DropDownList没有加载默认选择的值的列表,而只是从上到下加载列表。在检查源html时,没有选定的值。 但是当我调试DataReader时,列表中有相应的记录。

在我的控制器中我有

 NpgsqlCommand cmd = new NpgsqlCommand
            ("SELECT * FROM q_product  " +                
            "LEFT JOIN q_department ON (q_product.department_guid = q_department.department_guid)" +
            "LEFT JOIN q_group ON (q_product.q_groupid = q_group.q_groupid)" +                
            "ORDER BY q_guid ASC " +
            "FETCH FIRST 1 ROWS ONLY"
            , connection);

        NpgsqlDataReader dr = cmd.ExecuteReader();

        while (dr.Read())
        {
            var productPage = new ProductViewModel();
            productPage.q_guid = Guid.Parse(dr["q_guid"].ToString());
            productPage.q_description = dr["q_description"].ToString();
            productPage.q_barcode = dr["q_barcode"].ToString();
            productPage.viewDepartment = dr["q_name"].ToString();
            productPage.viewGroup = dr["q_groupname"].ToString();

            //other columns...

在控制器中填充下拉列表

var pagedProduct = new PaginatedList<ProductViewModel>(viewModelQuery, currentPageIndex, pageSize);

        ViewBag.department_guid = new SelectList(db.q_department, "department_guid", "q_name", pagedProduct.SingleOrDefault().viewDepartment);            
        ViewBag.q_groupid = new SelectList(db.q_group, "q_groupid", "q_groupname", pagedProduct.SingleOrDefault().viewGroup);

调试以查看呈现页面之前的值

Debug Screenshot

在我的视图(cshtml页面)中,我有

@Html.DropDownList("department_guid", null, htmlAttributes: new { @class = "form-control" })
@Html.DropDownList("q_groupid", null, htmlAttributes: new { @class = "form-control" })

这导致列表加载chossing /选择适当的值。

Default loaded selection

  • 部门应该有部门1加载/选择
  • 集团应装载/选择酒

因此,如果列表在渲染之前在控制器中具有适当的值,我认为我在剃刀代码中缺少一个步骤以获得适当的选择?我该如何解决/解决这个问题?

1 个答案:

答案 0 :(得分:0)

解决了问题。

错误在这些行上

productPage.viewDepartment = dr["q_description"].ToString();
productPage.viewGroup = dr["q_barcode"].ToString();

这是键入KEY列而不是文本列的问题。对我的疏忽。

productPage.viewDepartment= dr["department_guid"].ToString();
productPage.viewGroup= dr["q_groupid"].ToString();