您的位置:首页 > 编程语言 > ASP

ASP.NET MVC中下拉列表的实现

2009-06-14 17:03 579 查看
可以通过jQuery的ajax请求在页面重实现级联列表的效果,主要步骤如下:

1,扩展jQuery函数,编写清空何加载下拉列表的函数,代码如下:

(function($) {
$.fn.emptySelect = function() {
return this.each(function() {
if (this.tagName == 'SELECT') this.options.length = 0;
});
}
$.fn.loadSelect = function(optionsDataArray) {
return this.emptySelect().each(function() {
if (this.tagName == 'SELECT') {
var selectElement = this;
$.each(optionsDataArray, function(index, optionData) {

var option = new Option(optionData.caption,
optionData.value);
if ($.browser.msie) {
selectElement.add(option);
}
else {
selectElement.add(option, null);
}
});
}
});
}
}
)(jQuery);


2,在controller中编写方法,从数据库中取得数据并序列化为JSON对象,源代码如下:

//
//Get kinds
public ActionResult getKinds()
{
//IQueryable<SelectData> sl;
//SelectData[] sl = new SelectData[1];
//int i = 0;
List<SelectData> sl = new List<SelectData>();
var kinds = infoRepository.FindAllKinds();
foreach (var kind in kinds)
{
SelectData sd = new SelectData()
{
caption = kind.kind_desc,
value = kind.info_kind.ToString()
};
sl.Add(sd);
}
return Json(sl);
}
//
//Get classes
public ActionResult getClasses(int info_kind)
{
List<SelectData> sl = new List<SelectData>();
var classes = infoRepository.FindClassesByKind(info_kind);
foreach(var infoclass in classes)
{
SelectData sd = new SelectData()
{
caption = infoclass.class_desc,
value = infoclass.info_class.ToString()
};
sl.Add(sd);
}
return Json(sl);
}


3,在view中通过JQUERY发出ajax请求在服务器段取得数据并生成下拉列表,在父列表中的change事件中动态改变子列表的option,源代码如下:

$(function() {
var url = window.location.href.replace(/Create/, "getKinds");
$.getJSON(url, function(data) {
$('#info_kind').loadSelect(data);
});
var url2 = window.location.href.replace(/Create/, "getClasses");
//            var kindValue = $(this).val();
//            alert(kindValue);
$.getJSON(
url2,
{ info_kind: 0 },
function(data) {
$('#info_class').loadSelect(data);
}
);
$('#info_kind').change(function() {
var url = window.location.href.replace(/Create/, 'getClasses');
//                alert(url);
var kindValue = $(this).val();
var info_class = $('#info_class');
//                alert(info_class);
$.getJSON(
url,
{ info_kind: kindValue },
function(data) {
info_class.loadSelect(data);
}
);
});

}
)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: