C# 如何在razor视图中构建foreach循环内的数组

C# 如何在razor视图中构建foreach循环内的数组,c#,asp.net,asp.net-mvc,asp.net-mvc-4,razor,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Razor,我使用的是MVC4和C#,当我在模型中循环时,我试图在视图中构建和排列,出于某种原因,我得到了一个“超时过期。超时时间在操作完成之前已经过去,或者服务器没有响应。”如果我删除尝试构建数组arr1和arr2的部分,并将它们发送到名为ArrTotal的方法,则效果很好。这似乎是一个不假思索的问题,不知道为什么会导致超时。它应该在与以前相同的查询过程中构建数组,而ArrTotal方法所做的只是将两个数组中的值相加,不应该发生导致服务器超时的新查询 @model Tuple<Namespace.M

我使用的是MVC4和C#,当我在模型中循环时,我试图在视图中构建和排列,出于某种原因,我得到了一个“超时过期。超时时间在操作完成之前已经过去,或者服务器没有响应。”如果我删除尝试构建数组arr1和arr2的部分,并将它们发送到名为ArrTotal的方法,则效果很好。这似乎是一个不假思索的问题,不知道为什么会导致超时。它应该在与以前相同的查询过程中构建数组,而ArrTotal方法所做的只是将两个数组中的值相加,不应该发生导致服务器超时的新查询

@model Tuple<Namespace.Models.Class1[], Namespace.Models.Class2[]>
....
         @{
    int i, x = 0;
    int[] arr1;
    int[] arr2;
    }
    @foreach (var item in Model.Item1)
    {            

        arr1[i] = item.count;
        <tr>
            <td>@item.year</td>
            <td>@item.month</td>
            <td>@item.count</td>
        </tr>
        i++;
    }
....
   @foreach (var item in Model.Item2)
    {                        
        arr2[x] = item.count;
        <tr>
            <td>@item.year</td>
            <td>@item.month</td>
            <td>@item.count</td>
        </tr>
        x++;
    }
....
    @{        
        int[] total = Namespace.Models.GetTotal.ArrTotal(arr1, arr2);        
    }
    @foreach (var t in total)
    {
    <tr>
        <td>@t</td>
    </tr>
    }
它是超时的返回视图。
正如我所说的,只要我不尝试在调用阵列时从视图构建阵列,它就可以工作。它在控制器中进行评估。数据库就在那里。但是,您使用的是实体框架吗?然后您仍然绑定到上下文,可能是延迟加载等等。确保拆下这些对象


可能是您使用的总方法也可能有问题

这应该是一个错误。不能只声明一个空数组,然后开始为不存在的索引赋值。我不知道为什么它会超时,而不是给你一个错误。我不能让每个数组的索引超过15个,我已经尝试声明了一个包含15个插槽的数组,比如int[]arr1=new int[15];好啊它在哪里超时?什么代码行显示超时?除了您的问题看起来很奇怪之外,您为什么还要这样做?这是一个视图,您不应该将代码放在这里(这与渲染无关)。如果您想要总数,只需将其添加到您的模型中(或者创建一个ViewModel,如果您不想污染您的模型的话)。我正在尝试找出如何将tuple与两个模型结合使用,并将其放在模型中的某个位置。我要避免的重要一点是不要多次运行databas查询,因为我已经在对两个不同的数据库运行查询了。关于小费,我会调查的。
var start = DateTime.Today.AddMonths(-15);
var query1 = (from t in db.table1
                     where t.ExportTemplate == "template1" && t.LogDate >= start
                     group t by new { Year = t.LogDate.Year, Month = t.LogDate.Month } into tg
                     orderby tg.Key.Year, tg.Key.Month
                     select new Class1
                     {
                         year = tg.Key.Year,
                         month = tg.Key.Month,
                         count = tg.Select(s => s.ObjectGUID).Distinct().Count()
                     }
                    );

        var query2 = (from t in db2.table2
                       where t.UserID == 3 && t.RequestID == 3 && t.ErrorID == 0 && t.LogDate >= start
                       group t by new { Year = t.LogDate.Value.Year, Month = t.LogDate.Value.Month } into tg
                       orderby tg.Key.Year, tg.Key.Month
                       select new Class2
                       {
                           year = tg.Key.Year,
                           month = tg.Key.Month,
                           count = tg.Select(s => s.GID).Distinct().Count()
                       }
                    );
        return View(System.Tuple.Create(query1.ToArray(), query2.ToArray()));