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.为什么我得到这个错误?我该怎么补救呢?

ASP.NET循环通过一个列表内部和另一个循环

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>
}

请按照上述方法修改代码。

希望这对你有帮助,如果你需要更多的信息,请告诉我。