剃刀@foreach 列表问题
razor @foreach issue with lists
我尝试将列表传递到我的视图中,但出现以下错误:CS1963:在我的视图中,表达式树可能不包含动态操作,位于行@html.displayfor...
public class ColNameLink
{
public string ColName { get; set; }
public List<string> AvaiableDBcolumns { get; set; }
}
public class ViewModelListColumns
{
public List<ColNameLink> ColList { get; set; }
}
控制器
var columnNames = (from dc in dt.Columns.Cast<DataColumn>()
select dc.ColumnName).ToList();
var AvailLinks = new List<string>();
AvailLinks.Add("FirstName");
AvailLinks.Add("SurName");
var viewModel = new ViewModelListColumns() { ColList = new List<ColNameLink>() };
columnNames.ForEach(colName => viewModel.ColList.Add(new ColNameLink { ColName = colName, AvaiableDBcolumns = AvailLinks }));
return View("ChooseColumns", viewModel);
查看
@Model uploabulk.ViewModels.ViewModelListColumns
<table class="table">
<tr>
<th>Column name</th>
<th>Database column</th>
<th>Include?</th>
</tr>
@foreach (var colList in Model)
{
foreach (var column in colList)
{
<tr>
<td>@Html.LabelFor(m => column.ColName) </td>
<td>Html.DropDownListFor("Selection", new SelectList(column.AvaiableDBcolumns, "AvailableDBcolumns"))</td>-->
<td></td>
</tr>
}
}
</table>
您的代码存在一些问题。首先,您的视图模型是 uploabulk.ViewModels.ViewModelListColumns
,这就是您在此处传递给它的内容:return View("ChooseColumns", viewModel);
.
但是在您的视图中,您试图在 Model
上编写一些 @foreach
循环,这是不可能的,因为您只能迭代 IEnumerable 类型。
因此请确保您的视图代码与您的视图模型一致:
@model uploabulk.ViewModels.ViewModelListColumns
<table class="table">
<tr>
<th>Column name</th>
<th>Database column</th>
<th>Include?</th>
</tr>
@for (var i = 0; i < Model.ColList.Count; i++)
{
<tr>
<td>@Html.LabelFor(m => m.ColList[i].ColName)</td>
<td>
@Html.DropDownListFor(
x => x.ColList[i].ColName,
new SelectList(Model.ColList[i].AvaiableDBcolumns)
)
</td>
<td></td>
</tr>
}
</table>
您需要引用 ColList
属性 才能对其进行迭代:
@foreach (var colList in Model.ColList)
我尝试将列表传递到我的视图中,但出现以下错误:CS1963:在我的视图中,表达式树可能不包含动态操作,位于行@html.displayfor...
public class ColNameLink
{
public string ColName { get; set; }
public List<string> AvaiableDBcolumns { get; set; }
}
public class ViewModelListColumns
{
public List<ColNameLink> ColList { get; set; }
}
控制器
var columnNames = (from dc in dt.Columns.Cast<DataColumn>()
select dc.ColumnName).ToList();
var AvailLinks = new List<string>();
AvailLinks.Add("FirstName");
AvailLinks.Add("SurName");
var viewModel = new ViewModelListColumns() { ColList = new List<ColNameLink>() };
columnNames.ForEach(colName => viewModel.ColList.Add(new ColNameLink { ColName = colName, AvaiableDBcolumns = AvailLinks }));
return View("ChooseColumns", viewModel);
查看
@Model uploabulk.ViewModels.ViewModelListColumns
<table class="table">
<tr>
<th>Column name</th>
<th>Database column</th>
<th>Include?</th>
</tr>
@foreach (var colList in Model)
{
foreach (var column in colList)
{
<tr>
<td>@Html.LabelFor(m => column.ColName) </td>
<td>Html.DropDownListFor("Selection", new SelectList(column.AvaiableDBcolumns, "AvailableDBcolumns"))</td>-->
<td></td>
</tr>
}
}
</table>
您的代码存在一些问题。首先,您的视图模型是 uploabulk.ViewModels.ViewModelListColumns
,这就是您在此处传递给它的内容:return View("ChooseColumns", viewModel);
.
但是在您的视图中,您试图在 Model
上编写一些 @foreach
循环,这是不可能的,因为您只能迭代 IEnumerable 类型。
因此请确保您的视图代码与您的视图模型一致:
@model uploabulk.ViewModels.ViewModelListColumns
<table class="table">
<tr>
<th>Column name</th>
<th>Database column</th>
<th>Include?</th>
</tr>
@for (var i = 0; i < Model.ColList.Count; i++)
{
<tr>
<td>@Html.LabelFor(m => m.ColList[i].ColName)</td>
<td>
@Html.DropDownListFor(
x => x.ColList[i].ColName,
new SelectList(Model.ColList[i].AvaiableDBcolumns)
)
</td>
<td></td>
</tr>
}
</table>
您需要引用 ColList
属性 才能对其进行迭代:
@foreach (var colList in Model.ColList)