我在网站上工作类似于ASP.NET C#中的作业门户。在这里,我需要填写一些DropDownLists来为用户提供选择。在一个部分中,我需要填写3个DropDownLists,每个都有国家,州和城市。有没有办法在不维护国家,州和城市的数据库的情况下填写所有这些列表?我听说过一些第三方工具来执行这项任务,但不知道在哪里寻找它。
在第二部分中,我需要使用所有可能的资格填充DropDownLists,并根据该选择,另一个DropDownLists应填充在其下提供的专业化 资格。
请告诉我最简单的解决方案。
感谢所有人。
答案 0 :(得分:1)
我不知道任何提供国家/州/城市列表的网络服务,但我认为它们可能存在,因为这实际上是每天都很常见的情况。
我将提供有关您的第二个问题的信息。这是相关的下拉。
相关下拉总是很棘手,最好在没有完整页面回发的客户端上完成加载时完成。但最终它总是归结为填充它们的数据的复杂性和数量。
如果您在第一次下拉中有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%的所有数据)。反正。
将客户端事件附加到第一个下拉列表,该事件发出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
}
});
});
当返回来自服务器的数据时,我们可以填充第二个下拉列表并在其change
事件上附加类似的行为。
这样,由于只加载了少量数据,我们得到了快速的页面响应。
答案 1 :(得分:0)
任何IEnumerable都可以用于像IList这样的数据源。创建国家/地区对象列表并将其设置为数据源。设置DisplayMember和ValueMember,并填充您的列表。