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

时间:2016-10-21 18:09:09

标签: c# asp.net

我在另一个列表中创建了一个列表,如下所示:

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.为什么我收到此错误?我该如何解决?

2 个答案:

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

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

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