0

我有一个页面列出了许多机构。列表中每个代理商旁边都有一个代理商类型下拉列表。

我在我的控制器方法中有这个设置我的视图:

var agenciesViewModel = new AgencyViewModel
    {
        Agencies = _agenciesRepository.Agencies.ToList(),
        AgencyTypes = _agencyTypesRepository.AgencyTypes.ToList()
    };

return View("Agencies", agenciesViewModel);

在我的代理商看来:

<table cellpadding="0" cellspacing="0">    

    @foreach (Agency agency in Model.Agencies)
    {
    <tr>
        <td><b>@agency.Name</b></td>
        <td>
            @Html.DropDownList("AgencyTypes" + agency.ID,
                new SelectList(Model.AgencyTypes, "AgencyTypeID", "Name"))
        </td>
    </tr>
    }
</table>

问题是在这个特定页面上,我列出了大约 500 个代理机构,这意味着 500 个下拉列表。大约有2000种代理类型。

这会导致初始页面加载时出现性能问题,加载页面大约需要 2 分钟。几乎每次它循环通过代理时,它似乎都在从数据库中检索 AgencyTypes 集合。

它还会在页面加载后导致性能问题 - 如果我单击其中一个下拉菜单,打开列表大约需要 15 秒。我发现这很奇怪,因为所有数据都已加载,但由于某种原因,它导致我的浏览器出现性能问题。

我是否正确设置了这些下拉列表,还是有更好的方法可以提高性能?

4

1 回答 1

1

问题有两个方面:

  1. 500 个机构 * 2000 个机构类型 = 1,000,000<option>次下载,其中大部分是重复的
  2. 下载机构和机构类型还涉及与数据一起下载许多<td>,<select><option>标签。

您可以通过使用 Ajax 将代理和代理类型下载为 json 数据来缩短下载时间,然后动态构建您的表。

  1. 您的控制器操作应返回最少的信息来加载骨架视图。
  2. 在您看来,使用 javascript 和 Ajax 从您的控制器下载您的代理和代理类型列表。
  3. 根据下载的 json 数据构建你的<table>和s。<select>

这样,您不仅可以减少下载数据的开销,还可以一次性下载 2000 个代理类型。

至于您打开下拉列表的延迟,这可能是因为它们中有 2000 个条目。正在使用的浏览器、版本、操作系统,都可能是导致此问题的因素。

于 2013-05-25T04:17:49.550 回答