我在另一个列表中创建了一个列表,如下所示:
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.
为什么我收到此错误?我该如何解决?
答案 0 :(得分:0)
x是否为空?导致你的@ Html.Display错误。
我建议一个简单的试错法消除过程,即注释掉DisplayFor并查看错误是否消失。这将有助于缩小原因。
答案 1 :(得分:0)
您正在使用&#34; ViewData&#34;而不是&#34; ViewData [&#34; KeyName&#34;]&#34;。如果您仅使用ViewData,它将考虑所有ViewData值以及所需数据。例如 WEBPAGE TITLE 也将进入foreach循环。这可能导致了这个问题。
我建议您指定&#34; ViewData [&#34; KeyName&#34;]&#34;而不是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 Code循环遍历内部列表和另一个循环
@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>
}
请按照上述方法修改您的代码。
希望这会对您有所帮助,如果您需要更多信息,请告诉我。