代码改变世界

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来刷新。