如何只让用户控件回传
用户控件内部动态添加了若干dropdownlist,同时订阅了它的SelectedIndexChange事件,由于必须要页面回传才会触发,有没有办法只让用户控件自身回传,而所在页面不回传?
[解决办法]
ajax无刷新应用
[解决办法]
UpdatePanel可以实现
既然不会传,直接使用ajax做东西更省事
[解决办法]
以前贴过的一个demo
- HTML code
<%@ Page Language="C#" %><script runat="server"> protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { this.Calendar1.Style["position"] = "absolute"; this.TextBox1.DataBind(); } } protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { this.DropDownList2.Items.Clear(); switch (this.DropDownList1.SelectedValue) { case "北京": this.DropDownList2.Items.Add("天安门广场"); this.DropDownList2.Items.Add("颐和园"); this.DropDownList2.Items.Add("雍和宫"); this.DropDownList2.Items.Add("红螺寺"); break; case "上海": this.DropDownList2.Items.Add("崇明岛"); this.DropDownList2.Items.Add("外滩"); this.DropDownList2.Items.Add("万佛阁"); break; case "香港": this.DropDownList2.Items.Add("海洋公园"); this.DropDownList2.Items.Add("半岛酒店"); break; } } protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e) { ShowResult(); } protected void Button1_Click(object sender, EventArgs e) { if (this.Calendar1.Visible) SetupTheDate(); else { try { this.Calendar1.SelectedDate = DateTime.Parse(this.TextBox1.Text); this.Calendar1.VisibleDate = this.Calendar1.SelectedDate; } catch { } this.Calendar1.Visible = true; } } protected void Calendar1_SelectionChanged(object sender, EventArgs e) { SetupTheDate(); } private void SetupTheDate() { this.TextBox1.Text = this.Calendar1.SelectedDate.ToShortDateString(); this.Calendar1.Visible = false; ShowResult(); } void ShowResult() { this.Label1.Text = "您选择" + this.TextBox1.Text + "去" + this.DropDownList2.SelectedValue; UpdatePanel3.Update(); }</script><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head id="Head1" runat="server"> <title>演示使用基本的asp.net ajax功能</title></head><body> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server" /> <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> <ContentTemplate> <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"> <asp:ListItem>--请选择--</asp:ListItem> <asp:ListItem>北京</asp:ListItem> <asp:ListItem>上海</asp:ListItem> <asp:ListItem>香港</asp:ListItem> </asp:DropDownList> <asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged" /> </ContentTemplate> </asp:UpdatePanel> <br /> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td> 请输入日期: </td> <td> <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional"> <ContentTemplate> <table cellpadding="0" cellspacing="0"> <tr> <td> <asp:TextBox ID="TextBox1" runat="server" Width="147px" Text="<%# DateTime.Now.AddDays(20).ToShortDateString() %>" /> <asp:Button ID="Button1" runat="server" Text="..." OnClick="Button1_Click" /> </td> </tr> <tr> <td> <asp:Calendar ID="Calendar1" runat="server" Visible="False" OnSelectionChanged="Calendar1_SelectionChanged" BackColor="#FFFFCC" BorderColor="#FFCC66" BorderWidth="1px" DayNameFormat="Shortest" Font-Names="Verdana" Font-Size="8pt" ForeColor="#663399" Height="200px" ShowGridLines="True" Width="220px"> <SelectedDayStyle BackColor="#CCCCFF" Font-Bold="True" /> <SelectorStyle BackColor="#FFCC66" /> <TodayDayStyle BackColor="#FFCC66" ForeColor="White" /> <OtherMonthDayStyle ForeColor="#CC9966" /> <NextPrevStyle Font-Size="9pt" ForeColor="#FFFFCC" /> <DayHeaderStyle BackColor="#FFCC66" Font-Bold="True" Height="1px" /> <TitleStyle BackColor="#990000" Font-Bold="True" Font-Size="9pt" ForeColor="#FFFFCC" /> </asp:Calendar> </td> </tr> </table> </ContentTemplate> </asp:UpdatePanel> </td> </tr> </table> <hr /> <asp:UpdatePanel ID="UpdatePanel3" runat="server" UpdateMode="Conditional"> <ContentTemplate> result: <asp:Label ID="Label1" runat="server" EnableViewState="False" Font-Size="Small"></asp:Label> </ContentTemplate> </asp:UpdatePanel> </form></body></html>