我正在尝试从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>
答案 0 :(得分:0)
您无法从List<string>
创建选择列表。它需要一个IEnumerable<SelectListItem>
,或者您需要一个类实例列表,然后您可以在其中传递属性名称以用于Value
和Text
。所以,你在这里唯一的选择就是使用LINQ来选择SelectListItem
的字符串列表:
var options = ddlcolumnmapping.Select(m => new SelectListItem
{
Value = m,
Text = m
});
现在,您可以将options
传递到您的下拉菜单中,一切都是金色的。此外,您不需要创建SelectList
的实际实例,事实上,如果您不这样做,情况会更好。例如,如果您使用此ViewBag.options
变量的值设置options
,那么在您的视图中:
@Html.DropDownList("", (IEnumerable<SelectListItem>)ViewBag.options)