1

我有一个简单的问题要问你。

我有一个视图,在 for 循环中,我创建了这个:

@for (int i = 0; i < Model.Count(); i++)
            {
                <tr>
                    <td>@Html.DisplayFor(x => x[i].OtherObj.m_ObjName)@Html.HiddenFor(x => x[i].m_Card.m_CardName)</td>
                    <td>@Html.DisplayFor(x => x[i].m_NbInStock)@Html.HiddenFor(x => x[i].m_NbInStock)</td>
                    <td>@Html.DisplayFor(x => x[i].m_QtyAllowed)@Html.HiddenFor(x => x[i].m_QtyAllowed)</td>
                    <td>@Html.CheckBoxFor(x => x[i].m_IsForSelling)</td>

                    @Html.HiddenFor(x => x[i].m_ObjID)
                    @Html.HiddenFor(x => x[i].m_OtherObj)
                    @Html.HiddenFor(x => x[i].m_OtherObjID)
                    @Html.HiddenFor(x => x[i].m_IsAllocated)
                    @Html.HiddenFor(x => x[i].m_IsReallyThere)
                </tr>
            }

你明白了。我想我必须为对象的每个属性创建隐藏框,并且列表可以填充许多项目。现在500是一个近似值,它可能会增长更多。

我的观点是,该过程“似乎”正常滚动,直到调试到达视图中的最后一行代码:

<div>
    @Html.ActionLink("Back to List", "SearchIndex")
</div>

而且,到那时,页面最终显示大约需要几分钟或四分钟。恐怕一旦我有了所有可用的数据,它就会飞涨。

是因为需要所有隐藏字段吗?也许生成 HTML 页面可能需要一段时间?

谢谢你的智慧。

编辑 **

我想我有罪魁祸首:

section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

我曾经把这行代码放在视图的末尾,这可能是原因吗?

4

1 回答 1

2

现在500是一个近似值,它可能会增长更多。

我建议你后退一步。由于多种原因,这可能是一个坏主意:

  • 每次发布页面时的请求大小都很大
  • 许多可能被篡改的字段,因此都需要验证
  • 大型 DOM
  • 在渲染引擎上加载(这不应该花费几分钟,但解析所有这些表达式不是免费的)。

备择方案

  • 将内容分成更小的页面;和/或使用数据分页和/或延迟加载。

  • 将会话状态用于您始终与页面往返的用户特定数据。

  • 如果数据不是特定于用户的(例如产品列表),Cache则比Session.

  • 对数据库进行更多的访问。现代数据库在缓存查询和数据方面非常“聪明”;在需要时提取这些数据甚至可能不会影响磁盘子系统(因此既快速又高效)。

  • 本地存储(根据您的示例数据可能不适用,但值得一提)

于 2013-03-07T22:10:07.413 回答