从List <string>值填充下拉列表

时间:2016-02-24 17:45:03

标签: c# asp.net-mvc

我正在尝试从viewbag填充下拉列表,并从列表中填充viewbag。我有一些问题。有人可以让我知道我错过了什么

C#代码:

public ActionResult ColumnMapping()
        {
            DataTable dt = new DataTable();
            if (Session["datatable"] != null)
            {
                dt = ((DataTable)Session["datatable"]);
                ViewBag.ColumnMapping = dt;

                List<string> ddlcolumnmapping = columnmappingddl();
                ViewBag.ddlcolmapping = ddlcolumnmapping;
            }            
            return View(dt);
        }

.cshtml文件:

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <title>Column Mapping</title>
</head>
<body>
    <div>Column Mapping:</div>

@if (ViewBag.ColumnMapping != null)
{
    foreach (System.Data.DataColumn col in Model.Columns)
    {
        @col.Caption

       @Html.DropDownList("", new SelectList(ViewBag.ddlcolmapping))

            @*foreach (System.Data.DataRow row in Model.Rows)
                {
                    @Html.Raw(col.Caption + " " + row[col].ToString() + "<br/>")
                }*@
            }
            }
</body>
</html>

1 个答案:

答案 0 :(得分:0)

您无法从List<string>创建选择列表。它需要一个IEnumerable<SelectListItem>,或者您需要一个类实例列表,然后您可以在其中传递属性名称以用于ValueText。所以,你在这里唯一的选择就是使用LINQ来选择SelectListItem的字符串列表:

var options = ddlcolumnmapping.Select(m => new SelectListItem
{
    Value = m,
    Text = m
});

现在,您可以将options传递到您的下拉菜单中,一切都是金色的。此外,您不需要创建SelectList的实际实例,事实上,如果您不这样做,情况会更好。例如,如果您使用此ViewBag.options变量的值设置options,那么在您的视图中:

@Html.DropDownList("", (IEnumerable<SelectListItem>)ViewBag.options)