【问题标题】:Cascading drop down list Data source级联下拉列表 数据源
【发布时间】:2013-02-23 01:11:18
【问题描述】:

我的团队正在开发一个使用 MVC4 和 .NET 4.5 的 Web 应用程序。一项任务是创建父级下拉列表,该列表将在父级中选择一个值时更新子下拉列表 - 例如,在选择状态时,状态下拉列表将过滤城市的下拉列表。

在我们的其他项目中,我们使用 Ajax 调用 Web 服务或数据库在选择父值时填充子值。在我上面的示例中,选择了明尼苏达州,并对数据库进行 Ajax 调用以获取 MN 中的所有城市。我已阅读此处的其他帖子和遵循此概念的教程。

我们团队的一位新开发人员认为上述方法效率低下,最好在页面加载时获取所有城市,将城市作为 Jason 对象存储在 JavaScript 变量中,然后使用 jquery 循环遍历 JavaScript 变量并构建子列表。

有人可以就他们使用的方法给我反馈吗?当我们可能只显示 10 条记录时,我不相信将数千条记录拉入浏览器并存储在客户端上是非常有效的。该开发人员还认为,在 JavaScript 中循环遍历 10000 行 JSON 对象比调用数据库获取 10 行更快。

【问题讨论】:

  • 我更倾向于给客户带来这么多浪费的数据。桌面浏览器可能会顺利处理它,但如果没有别的,它会浪费带宽。对于城市等缓慢变化的数据,您可以大量利用缓存并消除数据库流量。
  • 我同意 OP 和 Tim medora,如果您不必通过一次迭代获取所有数据,则无需将 10000 行推送到 JSON。这将是无效的。但是,如果您还是通过 AJAX 请求获得了全部 10000 行,则将数据推送到浏览器会更有效。
  • 感谢您的反馈。我想缓存数据并减少数据库调用的次数。我认为这将是一个很好的妥协。我真的不相信需要在 js 变量中存储 100 或 1000 个 JSON 对象
  • 即使没有显式缓存,数据库也会添加自己的缓存/优化,这仍然是我的首选方法。 使用缓存,它应该是极快的;一个 AJAX 请求,只提取您需要的城市。如果你想支持搜索(例如自动完成),你可以构建和存储一个像trie 这样的数据结构,其中包含服务器缓存中的所有城市。
  • @TimMedora 我以前从未实现过真正的,我将对此进行研究。字典会有点相似吗?字典将包含每个州的键和城市列表作为值?

标签: c# jquery asp.net-mvc


【解决方案1】:

创建您的列表,您可以从 LINQ 调用所有内容。在进行其他调用以实例化之前,请检查要从那里创建的缓存

public IList<Example> GetList(string _state)
{

    IList<Example> cities = new List<Example>();

    Cache cache = HttpContext.Current.Cache;

    if (cache[_state] != null)
        cities = (IList<Example>)cache[_state];

    else
    {
        //Do your calls
        cache.Insert(_state, cities);
    }

    return cities;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多