问题描述
||
关闭。这个问题需要更加集中。它当前不接受答案。
解决方法
任何IEnumerable都可以用于IList之类的数据源。列出国家对象并将其设置为数据源。设置DisplayMember和ValueMember,然后将填充列表。
,我不知道会提供国家/地区/城市列表的任何Web服务,但我想它们可能存在,因为这实际上每天都是相当普遍的情况。
我将提供有关您的第二个问题的信息。这是相关的下拉列表。
当在客户端上完成加载而没有整页回发时,相关的下拉列表始终很棘手,最好做到。但是最后,总归结为填充数据的复杂性和数据量。
数据不多
当您在第一个下拉菜单中有10-50个项目,而在第二个下拉菜单中又有10-50个项目时,可以说您没有太多数据。或者,当下拉列表多于两个时,我们可以说当总共少于x000条记录时,我们没有太多数据(在各种浏览器中进行一些测试以获得一些可接受的限制)。在这种情况下,您可以在HTML中预加载所有这些数据,并且当用户与这些字段进行交互时Javascript可以使用这些数据。
我会这样做。我将在服务器上生成JSON并以HTML形式提供:
var qualifications = {
\"Manager\": [\"First\",\"Second\",...],\"Developer\": [\"...\",...
};
然后,我要么将我的拳头下拉列表预先填充到服务器上,要么在页面加载时将其填充到客户端上(在jQuery中使用using1ѭ)。然后处理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
}
});
});
当从服务器返回数据时,我们可以填充第二个下拉列表,并在其“ 2”事件上附加类似的行为。
对下一个下拉列表执行类似的操作
这样,由于仅加载少量数据,我们获得快速的页面响应。