ASP.NET循环通过一个列表内部和另一个循环
本文关键字:循环 列表 一个 内部 另一个 NET ASP | 更新日期: 2023-09-27 18:14:09
我在另一个列表中创建了一个列表,如下所示:
var collectionsList = db.Data.ToList().Select(m => new { m.collection, m.hidden }).Where(model => model.hidden == false).Distinct();
foreach (var item in collectionsList)
{
ViewData.Add(new KeyValuePair<string, object>(item.collection, db.Data.ToList().Where(model => model.collection == item.collection)));
}
return View();
现在在我的视图中,我试图通过ViewData循环,然后通过ViewData内的列表循环,如下所示:
var collectionsList = db.Data.ToList().Select(m => new { m.collection, m.hidden }).Where(model => model.hidden == false).Distinct();
foreach (var item in collectionsList)
{
ViewData.Add(new KeyValuePair<string, object>(item.collection, db.Data.ToList().Where(model => model.collection == item.collection)));
}
return View();
@foreach (var item in ViewData)
{
<h1 style="padding-bottom:50px;">item.Key</h1>
<table class="table">
<tr style="border-bottom: 1px solid #333;">
<th>
Design
</th>
<th>
Size (sq ft.)
</th>
<th style="text-align: right;">
Price
</th>
</tr>
@foreach(var x in item.Value as List<CP.Models.Pricing>)
{
<tr>
<td>
@Html.DisplayFor(modelItem => x.name)
</td>
<td>
@Html.DisplayFor(modelItem => x.sqft) sq ft.
</td>
<td style="text-align: right;">
$@Html.DisplayFor(modelItem => x.basePrice)
</td>
</tr>
}
</table>
}
但是我在第二个循环中得到这个错误:Object reference not set to an instance of an object.
为什么我得到这个错误?我该怎么补救呢?
x为空?导致你的@Html。显示错误
我建议一个简单的试错消除过程,即注释掉DisplayFor,看看错误是否消失。这将有助于缩小病因范围。
您使用的是"ViewData"而不是"ViewData["KeyName"]"。如果您只使用ViewData,它将考虑所有ViewData值以及所需的数据。例如网页标题也将进入foreach循环。这可能是导致问题的原因。
我建议您指定"ViewData["KeyName"]"而不是ViewData。这样循环将只运行指定的ViewData键
示例代码,这是工作对我来说都很好,如下所示:
ViewData声明和赋值
ViewDataDictionary vd = new ViewDataDictionary();
List<string> lst = new List<string>();
lst.Add("Data1User1");
lst.Add("Data2User1");
lst.Add("Data3User1");
lst.Add("Data4User1");
vd.Add("User1", lst);
lst = new List<string>();
lst.Add("Data1User2");
lst.Add("Data2User2");
vd.Add("User2", lst);
ViewData["vdt"] = vd;
Razor代码在内部循环一个列表,另一个循环
@foreach (var vdt in ViewData["vdt"] as ViewDataDictionary)
{
<h1 style="padding-bottom: 50px;"> @vdt.Key </h1>
<table class="table">
<tr style="border-bottom: 1px solid #333;">
<th>Design
</th>
</tr>
@foreach (var x in vdt.Value as List<string>)
{
<tr>
<td>
@x
</td>
</tr>
}
</table>
}
请按照上述方法修改代码。
希望这对你有帮助,如果你需要更多的信息,请告诉我。