一直都是使用jquery的$.ajax,由于刚刚加入的公司是用asp.net的,webform与之前的ajax加在一起显得很混乱,后来发现asp.net已经封装了一下ajax功能,就查了一下,并且做了测试,写出来,备忘:
前台代码:
1 <asp:ScriptManager ID="ScriptManager1" runat="server" /> 2 <asp:TextBox ID="tboutup" runat="server"></asp:TextBox> 3 <asp:Button ID="btnouttg" Text="非异步按钮,但是被作为触发器" 4 OnClick="Button1_Click" runat="server" /> 5 <asp:Button ID="btnoutnotg" Text="非异步按钮" runat="server" /> 6 <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server"> 7 <Triggers> 8 <asp:AsyncPostBackTrigger ControlID="btnouttg" /> 9 </Triggers> 10 <ContentTemplate> 11 <asp:TextBox ID="tbinup" runat="server"></asp:TextBox> 12 <asp:Button ID="btninup" Text="异步按钮" OnClick="btninup_Click" runat="server" /> 13 </ContentTemplate> 14 </asp:UpdatePanel>
后台代码:
1 public partial class UpdatePanelTriggers : System.Web.UI.Page 2 { 3 protected void Page_Load(object sender, EventArgs e) 4 { 5 6 } 7 protected void Button1_Click(object sender, EventArgs e) 8 { 9 tboutup.Text += tboutup.Text; 10 tbinup.Text += tbinup.Text; 11 } 12 13 protected void btninup_Click(object sender, EventArgs e) 14 { 15 tboutup.Text += tboutup.Text; 16 tbinup.Text += tbinup.Text; 17 } 18 }
- 非异步按钮,一旦被绑定,便不会引起全局刷新,只能引起局部刷新了。
- 当某一回发事情被触发时,判断是否为UpdatePanel的异步事件,若是,则将所有的viewstate带回服务器,处理后,UpdatePanel内部控件的视图状态更新,其它的不更新。
- 对于触发UpdatePanel刷新的事件:
- 在UpdatePanel的字标签<Triggers>中指定能触发异步刷新的控件或者事件。
- 将UpdateMode设为Always则页面上所有的回发事件都会触异步刷新。
- 将UpdateMode设为Conditional的时候,只有Triggers定义的触发以及UpdatePanel的子控件的事件才会触发。
- 将ChildrenAsTriggers设为false时,子控件postback时候无法触发异步刷新(这个控件同时也无法触发页面的事件,所以。。。废了。。。)。
- UpdatePanel的子控件只能触发自己的,无法触发外层UpdatePanel刷新。
- 显式调用UpdatePanel的Update方法:
使用此方法一般是想在后台判定是否局部更新UpdatePanel,此时,要禁止UpdatePanel未经允许的刷新,所以,要设Conditional,且ChildrenAsTriggers设为false,然后在后台设置UpdatePanel.Update();