用国家、州和城市填充下拉列表,而不维护该任务的数据库

本文关键字:维护 任务 数据库 下拉列表 国家 填充 城市 | 更新日期: 2023-09-27 17:50:30

我正在网站上工作,就像ASP中的工作门户一样。净c#。这里我需要填写几个下拉列表,为用户提供选择。在一个部分,我需要填写3个下拉列表,每个下拉列表包含国家、州和城市。有没有一种方法可以让我在不维护国家、州和城市数据库的情况下填写所有这些列表?我听说过一些第三方工具可以执行此任务,但不知道在哪里可以找到它。

在第二部分中,我需要用所有可能的资格填充下拉列表,并且基于该选择,另一个下拉列表应该填充在该下提供的专门化资格。

请告诉我最简单的解决办法。

谢谢大家。

用国家、州和城市填充下拉列表,而不维护该任务的数据库

我不知道有任何web服务可以提供国家/州/城市列表,但我想它们可能存在,因为这确实是每天都很常见的场景。

我会提供你第二个问题的信息。这是相关的下拉菜单

相关的下拉菜单总是很棘手,最好在客户机上加载而没有完整的页面回发时完成。但最终,它总是归结为填充它们的数据的复杂性和数量。

数据不多

当你在第一个下拉列表中有10-50个项目,而在第二个下拉列表中每个项目又有10-50个项目时,我们可以说你没有太多的数据。或者当有两个以上的下拉框时,当总共有少于x000条记录时,我们可以说我们没有多少数据(在各种浏览器中进行一些测试以获得一些可接受的限制)。在这种情况下,你可以提供所有这些数据在你的HTML预加载和Javascript可以使用,当用户与这些字段交互。

我会这样做。我会在服务器上生成JSON并在HTML中提供:

var qualifications = {
    "Manager": ["First", "Second", ...],
    "Developer": ["...", ...],
    ...
};

然后我要么在服务器上预填充我的第一个下拉菜单,要么在页面加载时在客户端填充它(在jQuery中,这将是通过使用$(function(){...});)。处理change事件然后通过使用上述关联对象的一部分specialities中的数组来填充第二个下拉列表(我使用关联对象而不是数组,因为它将更容易找到相应的专业数组来填充我的第二个下拉列表,只需执行:

$("#FirstDropDown").change(function(){
    var specialities = qualifications[$(this).val()];
    ...
});

大量数据

当我们在每个下拉列表中有大量数据(或频繁变化的数据)时,不可能预先加载它们。只有当我们有一些用户界面过程时才可行,因为用户通常会选择许多组合(所以我们最终会加载所有数据的90%)。不管怎样。

  1. 在服务器上预加载第一个下拉菜单(或在页面加载时在客户端上)
  2. 将客户端事件附加到第一个下拉列表,该事件发出Ajax请求以获取第二个下拉列表数据:

    $("#Country").change(function(){
        $.ajax({
            type: "GET",
            url: "Geo/GetStates",
            data: $(this).val(),
            success: function(data){
                // populate states dropdown
            },
            error: function(xhr, state, err){
                // display alert or something
            }
        });
    });
    
  3. 当从服务器返回数据时,我们可以填充第二个下拉菜单,并在其change事件上附加类似的行为。

  4. 对下一个下拉菜单做类似的事情

这种方式我们得到快速的页面响应,因为只加载少量的数据。

任何IEnumerable都可以用于像IList这样的数据源。创建一个国家对象列表,并将其设置为数据源。设置DisplayMember和ValueMember,你的列表就被填充了。