级联菜单问题(C#,asp.net)

我有两个DropDownList,都是动态根据数据库添加数据的。想问下高手,怎么可以根据第一个DropDownList所选择的项,改变第二个的数据。而且不会刷新页面,不会有兼容问题或写一大堆兼容代码。

不刷新页面的话,我知道有三个方法。
1.用.net自带的异步控件,就是那个ScriptManager和UpdatePanel的那个,优点就是可以完全用服务器端控件,不用谢太多前台代码,快捷便利。缺点就是貌似兼容性不太好,而且挺耗系统资源,而且用了之后不兼容一切前台手写的JS脚本(我2年前用的时候就是这样,后来一直没用,不知道现在还存不存在这些问题)。

2.第一个DropDownList用服务器端控件,并绑定数据。第二个用客户端Select下拉列表控件,然后写Ajax脚本,再第一个下拉列表发生变化时出发异步请求函数,完成第二个下拉列表的数据绑定(异步请求后台,返回xml格式数据,然后给第二个select控件appendChild一系列的option)。这个方法优点是速度快,兼容性好(我最喜欢用这个,我各种IE6 7 8 火狐遨游啥的都兼容),全页面无刷新,而且是客户端控件,给服务器造成的负载相对轻一些。缺点是没有现成的Js封装代码的话会要求手写大量代码(需要的话留个联系方式我发你一个),而且要写相应的后台处理页面或者是WebMethod,对JS掌握程度有一定要求。

3.要么就这么着,第二个下拉列表写在一个aspx页面里,下拉列表就用服务器端的DropDownList,然后在级联页面用iframe把那个aspx页面给镶进去。第一个下拉列表选择触发后台事件,然后通过参数传递个第二个下拉列表的aspx页面,然后在第二个aspx页面里写绑定方法,然后重新DataBind。这样不会引起整个页面刷新,刷新只刷新第二个aspx页面。这样做优点也是不用写太多JS代码,光用后台代码实现。缺点就是麻烦死了,还得考虑第二个页面如何将值传给第一个页面。

我知道的就这么多了。。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-03-03
用AJAX 的局部刷新空间 updatepanel!你把你的两个DropDownList放在同一个updatepanel应该就可以了,不过如果很多人还是选择用JavaScript!都可以实现,只Javascript会比较麻烦点追问

给点代码吧!

追答

这个是javascript的,从别人那借过来的

联动菜单

var section1 = new Array();
section1[0] = ["1.1 aaa","section1.1"]
section1[1] = ["1.2 bbb","section1.2"]
section1[2] = ["1.3 ccc","section1.3"]
var section2 = new Array();
section2[0] = ["2.1 aaa","section2.1"]
section2[1] = ["2.2 aaa","section2.2"]
section2[2] = ["2.3 aaa","section2.3"]
var section3 = new Array();
section3[0] = ["3.1 aaa","section3.1"]
section3[1] = ["3.2 aaa","section3.2"]
section3[2] = ["3.3 aaa","section3.3"]
var chapterArr = new Array();
chapterArr[0] = ["第1章","chapter1",section1];
chapterArr[1] = ["第2章","chapter2",section2];
chapterArr[2] = ["第3章","chapter3",section3];
function setSection(chapter)
{
for (var i=document.myForm.section.length-1;i>-1;i--)
{
document.myForm.section.remove(i);
}
var arr = chapterArr[chapter][2];
for (var i=0;i"+arr[i][1]);
}
}
for (var i=0;i"+chapterArr[i][1]);
}
setSection(0);

http://zhidao.baidu.com/question/73586560.html?an=0&si=4

第2个回答  2011-03-03
用ajax,很好实现追问

给点代码吧!

追答

$('#Province').change(function() {
$.ajax({
type: "POST",
url: "/Address/GetAddress",
data: "name=" + $(this).val(),
success: function(json) {
$("#City option[value!='']").remove();
for (var item in json) {
$("#City").append("" + json[item].Text + "");
}
$("#District option[value!='']").remove();
}
});
})

jQuery的具体实现,希望你能看懂啊

第3个回答  2011-03-03
用javascript追问

给点代码吧!

追答


var sorts=new Array;

function AddMainList()
{
var mainSort=document.getElementById("DropDownList1");
mainSort.options.length=0;
mainSort.options.add(new Option("全部分类",-1));
var i=0;
while(i"+selectValue1+""+selectText1+""+selectValue2+""+selectText2;
return false;
}

级联菜单问题(C#,asp.net)
1.用.net自带的异步控件,就是那个ScriptManager和UpdatePanel的那个,优点就是可以完全用服务器端控件,不用谢太多前台代码,快捷便利。缺点就是貌似兼容性不太好,而且挺耗系统资源,而且用了之后不兼容一切前台手写的JS脚本(我2年前用的时候就是这样,后来一直没用,不知道现在还存不存在这些问题)。...

asp.net(C#)如何做省市县三级联动
然后把联动事件和初始化联动菜单的代码一写,把联动菜单控件(我用的是LIstbox,当然可以用DDL)的postback属性设置为true。呵呵,居然成了,三级无刷。而且页面上一个JS都没有哟!代码简单,我就喜欢这样。

asp.net C#后台 根据权限显示菜单
只能给你解决方案 通过session判断登陆的是否时管理员 如果你菜单时动态生成的那就直接if else 就好 如果是静态的那就把不想让非管理员看到的菜单设置为服务器控件,给它们添加上“runat="server" ”属性就好 然后在后台使用---控件ID.style.add(“display”,“none”)的方法来影藏这些菜单 ...

asp.net C# 二级联动菜单 至少一个参数没有被指定值
所谓至少一个参数没有指定值,指的就是你所查询的sql语句中或者是你绑定的字段中有字段数据库中没有

asp.net c#的一个初级问题(关于Page_Load的方法的使用)
1,不可以改的,因为它是装载页面时自动执行的.2..3..就不用回答了.可以通过URL参数传递参数到后端.如你上面的后台就能这样取值Request.QueryString["ExtensionName"] 值为 "Theva"

asp.net\/ c# 我的下拉选择菜单已经访问数据库,但是选择下一项的时候刷...
if(!IsPostBack)加载前 加个判断,你这里绑定数据源只要在第一次加载的时候绑定就可以了

软件工程设计师 C#、ASP.NET开发面试一般都会笔试和面试哪些题目,谢谢...
C#, ASP.NET笔试题(1) 1. 简述 private、 protected、 public、 internal 修饰符的访问权限 答: private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类中可以访问。 public : 公共成员,完全公开,没有访问限制。 internal: 在同一命名空间内可以访问。 2. 列举ASP.NET页面之间传...

菜鸟问题:C#,.net,.net framework,asp,asp.net,ado,ado.net,asp.net...
比如windows系统下大部分程序都是用C#开发的Winform或者WPF程序,以及很多网站应用是使用WEBFORM 或 MVC开发的。因此你可以简单的理解:winform、WPF、ASP.NET MVC 这些都是开发框架,即微软搭好了一个房子的龙骨,并且提供给了开发人员砖头、水泥、钢筋。开发人员只需要把这些砖头水泥垒上去就可以盖房子,而...

ASP.net(C#)的登陆问题(简单)
如果你要防止输入http:\/\/localhost\/LoginTest\/main.aspx页面照样执行。1.在登陆按扭的程序中,成功则写入session变量。如成功则=1,用户名密码错误则=0。2.在http:\/\/localhost\/LoginTest\/main.aspx页面判断存入的session变量是1则正常执行,否则跳转到http:\/\/localhost\/LoginTest\/Fail.aspx ...

ASP.NET 和C#什么关系啊? 听说ASP.NET 可以用C#来写 那为什么还有ASP.NE...
net。c# 是 visual studio .net 开发工具中的程序设计语言之一,但其作用不仅仅只限于做 asp.net 的 web 应用开发,还可以做很多非 web 技术的开发。可见如果想基于 asp.net 做 web 技术开发,必须学习 asp.net 技术, 还要选择一个支持 asp.net 的程序设计语言, c# 是其中一个选择。

相似回答
大家正在搜