asp.net AJAXUpdatePanel 部分属性的注意事项
2013-08-01 12:19 wmsdg 阅读(249) 评论(0) 收藏 举报新手第一次接触UpdatePanel控件,初始知识都是从一本错误百出的书中了解的,求高手指点一二。
测试页面非常简单,一个放在panel控件中的GridView,几个用来向数据库插入数据的文本框,还有一个button
UpdataPanle的UpdateMode设置为Conditional,意为不自动更新数据
button的click事件加入UpdataPanle的Triggers集合
页面文件在此
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div style="height: 200px"> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="False"> <ContentTemplate> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="id" DataSourceID="SqlDataSource1"> <Columns> <asp:BoundField DataField="id" HeaderText="id" InsertVisible="False" ReadOnly="True" SortExpression="id" /> <asp:BoundField DataField="name" HeaderText="name" SortExpression="name" /> <asp:BoundField DataField="email" HeaderText="email" SortExpression="email" /> </Columns> </asp:GridView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:adgdConnectionString2 %>" SelectCommand="SELECT * FROM [messageTab]"></asp:SqlDataSource> <br /> </ContentTemplate> </asp:UpdatePanel> <asp:Label ID="Label1" runat="server" Text="姓名:"></asp:Label> <asp:TextBox ID="nameTextBox" runat="server"></asp:TextBox> <br /> <asp:Label ID="Label2" runat="server" Text="邮件:"></asp:Label> <asp:TextBox ID="mailTextBox" runat="server"></asp:TextBox> <br /> <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /> </div> </form> </body> </html>
button的事件处理在此
protected void Button1_Click(object sender, EventArgs e) { SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["adgdConnectionString2"].ConnectionString); SqlTransaction sqlTran = null; try { conn.Open(); sqlTran = conn.BeginTransaction(); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = "insert into messageTab(name,email) Values('" + nameTextBox.Text + "','" + mailTextBox.Text + "')"; cmd.Transaction = sqlTran; cmd.ExecuteNonQuery(); sqlTran.Commit(); GridView1.DataBind(); //UpdatePanel1.Update(); } catch (Exception error) { sqlTran.Rollback(); } finally { conn.Close(); } }
书中范例要求UpdatePanel1.Update();
实际测试即使不使用UpdatePanel1.Update(),也能够异步刷新;如果Triggers中不添加,则button直接引起整个页面刷新
我的理解:UpdataPanle的Triggers截取页面上登记的控件事件,并以异步的方式去处理。一旦有此类事件发生,就会引起UpdataPanle刷新,而不需要执行Update()方法
附上其他人的理解:
1.当updatePanel的UpdateModel属性不设置的时候,全部默认为Aways,就是只要这个页面有一个UpdatePanel刷新都刷新。
2.当UpdateModel设置为Conditional的时候,如果不设置Triggers的时候,只有点当前UpdatePanel内部控件的时候才会刷新,并且带动当前页面所有UpdateModel为Aways的UpdatePanel刷新,还可以设置Updatepanel的Triggers,这样可以通过设置UpdatePanel外边的控件触发这个UpdatePanel来刷新。
浙公网安备 33010602011771号