大家好,又见面了,我是你们的朋友全栈君。
DropDownList省市联动
1、通常的做法是: ①添加ddl_Province、ddl_City ②对ddl_Province进行数据绑定 ddl_Province..DataSource = dt; ddl_Province.DataTextField = “ProvinceName”; ddl_Province.DataValueField = “ProvinceCode”; ③设置ddl_Province的AutoPostBack=”True” OnSelectedIndexChanged=”ddl_City_SelectedIndexChanged” ④在ddl_Province的OnSelectedIndexChanged事件对应的方法中根据ddl_Province的当前值对ddl_City进行绑定
代码语言:javascript复制protected void ddl_City_SelectedIndexChanged(object sender, EventArgs e)
{
BindCity();
}
这种做法可以实现下拉菜单联动的效果,但是由于ddl_Province设置了 AutoPostBack=”True” 所以每次修改ddl_Province的值时页面都会刷新,这样体验很不好。
2、改进方法 ①添加两个下拉菜单
代码语言:javascript复制<td> 省份: </td>
<td>
<asp:DropDownList ID="ddl_Province" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ddl_Province_SelectedIndexChanged"> </asp:DropDownList>
</td>
<td> 地市: </td>
<td>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:DropDownList ID="ddl_City" runat="server">
</asp:DropDownList>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ddl_Province" EventName="SelectedIndexChanged" />
</Triggers>
</asp:UpdatePanel>
</td>
②对ddl_Province进行数据绑定 ddl_Province..DataSource = dt; ddl_Province.DataTextField = “ProvinceName”; ddl_Province.DataValueField = “ProvinceCode”; ③设置ddl_Province的AutoPostBack=”True” OnSelectedIndexChanged=”ddl_City_SelectedIndexChanged” ④在ddl_Province的OnSelectedIndexChanged事件对应的方法中根据ddl_Province的当前值对ddl_City进行绑定
代码语言:javascript复制protected void ddl_City_SelectedIndexChanged(object sender, EventArgs e)
{
BindCity();
}
主要的过程没变化,重点就是ddl_City的创建过程发生了改变,在UpdatePanel中可以避免页面整体刷新。
获取DropDownList状态
在前台使用DropDownList控件的Value值,方法如下。
方法一: 在后台声明变量paramName来保存下拉菜单的状态, 前台使用<%:paramName%>来获取状态值。 某页面有三个下拉菜单分别为ddl_Car、ddl_Mouse、ddl_Notebook, 当三个下拉菜单都设置AutoPostBack=”True”时,
代码语言:javascript复制protected string car;
protected string mouse;
protected string notebook;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void ddl_Car_SelectedIndexChanged(object sender, EventArgs e)
{
//此时mouse、notebook值为null
car = ddl_Car.SelectedValue;
}
protected void ddl_Mouse_SelectedIndexChanged(object sender, EventArgs e)
{
//此时car、notebook值为null
mouse = ddl_Mouse.SelectedValue;
}
protected void ddl_Notebook_SelectedIndexChanged(object sender, EventArgs e)
{
//此时car、mouse值为null
notebook = ddl_Notebook.SelectedValue;
}
当你修改一个下拉菜单中的值时,后台中其他两个下拉菜单对应的变量的值就会变为null,因为AutoPostBack=”True”用户修改下拉菜单的值时页面刷新,car、mouse、notebook的值都被重置null,用户修改的哪个下拉菜单就会去执行对应的SelectedIndexChanged方法,在方法中向对应的变量赋值,但其他变量值仍未null。 解决方法: 我们可以在所有下拉菜单的SelectedIndexChanged方法中,对car、mouse、notebook均进行赋值这样就不会出现其他变量值为null的情况了。 虽然这种方法能达到目的,但是代码冗杂实际效果也不太好,在此不推荐使用。
方法二:用jquery的方法获DropDownList取控件的值 如果用jquery的方法获取下拉菜单的值时,不用设置AutoPostBack=”True” 和OnSelectedIndexChanged=”******_SelectedIndexChanged”(如果需要菜单联动 另当别论),页面也不会整体刷新,体验还不错,推荐使用
代码语言:javascript复制var car=$("#ddl_Car").val();
var mouse=$("#ddl_Mouse").val();
var notebook=$("#ddl_Notebook").val();
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/197754.html原文链接:https://javaforall.cn