asp.net的回送与AJAX回送

ASP.NET 回送

Web服务器控件可以包含服务器上调用的事件处理程序,例如Button的Click事件,TextBox的TextChanged事件。只有进行回送(PostBack)的时候,才会在服务器上触发事件。
文本框中的值改变时,TextChange事件不会立即触发,只有点击了Submit按钮,提交窗体,发送给服务器,才会触发TextChanged事件。Asp.Net运行库会验证控件的状态已经改变,并调用相应的事件处理程序。页面返回给服务器后,比较控件的新值和旧值是由View State完成的。
如果希望把更改事件立即传送给服务器,可以把AutoPostBack属性设置为true,每次改变都会回送,网络通信量也会增加,所以要慎用这个属性。

ASP.NET AJAX回送

在一般的ASP.NET回送中,会重新请求整个页面。为了减少网络上的传输量,可以使用ASP.NET AJAX回送。在AJAX回送中,只是用JavaScript返回并刷新页面的一部分,使用UpdatePanel可以做到这一点。
要使用AJAX功能,需要一个ScriptManager对象。

页面上有一个UpdatePanel

前端代码如下

 <form id="form1" runat="server">
        <div>
            <asp:ScriptManager runat="server" ID="ScriptManager1"></asp:ScriptManager>

        </div>
        <asp:UpdatePanel runat="server" ID="updatePanel1">
            <ContentTemplate>
                <asp:Label runat="server" Text="Lable" ID="Lable1"></asp:Label>
                <asp:Button runat="server" ID="Button1" Text="AJAX PostBack" OnClick="Button1_Click" />
            </ContentTemplate>     
        </asp:UpdatePanel>
        <asp:Label runat="server" Text="Lable" ID="Lable2"></asp:Label>
        <asp:Button runat="server" ID="Button2" Text="ASP.NET PostBack" OnClick="Button1_Click"/>
    </form>

后台代码

  public partial class ajax局部刷新页面 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            DateTime now = DateTime.Now;
            Lable1.Text = now.ToLongTimeString();
            Lable2.Text = now.ToLongTimeString();
        }
    }
  1. 页面初始化状态
    在这里插入图片描述
  2. 点击AJAX PostBack按钮
    在UpdatePanel中的Lable1的文本被更新
    Button1在UpdatePanel的内部,发送一个AJAX POST请求,使用XmlHttpRequest对象给服务器发送一个请求。服务器只返回更新UI所需的数据,解释数据后,JavaScripte代码就修改UpdatePanel内部的HTML控件,现实一个新的UI。在这里插入图片描述
  3. 点击ASP.NET PostBack按钮
    页面上所有的Lable控件都被更新了。在这里插入图片描述

页面上有多个UpdatePanel

前端代码为

   <form id="form1" runat="server">
        <div>
            <asp:ScriptManager runat="server" ID="ScriptManager1"></asp:ScriptManager>

        </div>
        <asp:UpdatePanel runat="server" ID="updatePanel1" UpdateMode="Conditional">
            <ContentTemplate>
                <asp:Label runat="server" Text="Lable" ID="Lable1"></asp:Label>
                <asp:Button runat="server" ID="Button1" Text="AJAX PostBack" OnClick="Button1_Click" />
            </ContentTemplate>     
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="Button2" EventName="Click" />
            </Triggers>
        </asp:UpdatePanel>
        <asp:UpdatePanel runat="server" ID="updatePanel2" UpdateMode="Conditional" >
            <ContentTemplate>
        <asp:Label runat="server" Text="Lable" ID="Lable2"></asp:Label>
        <asp:Button runat="server" ID="Button2" Text="ASP.NET PostBack" OnClick="Button1_Click"/>
            </ContentTemplate>  
        </asp:UpdatePanel>
    </form>

其中:UpdateMode="Conditional"属性可以设置两个UpdatePanel单独发送AJAX请求和响应

    <Triggers>
                <asp:AsyncPostBackTrigger ControlID="Button2" EventName="Click" />
            </Triggers>

这段代码使得,UpdatePanel1也会响应Button2的click事件,发送AJAX请求。

最终代码的运行结果是,单击Button1,更新UpdatePanel1的内容;单击Button2,更新UpdatePanel1和UpdatePanel2的内容,

猜你喜欢

转载自blog.csdn.net/weixin_41707267/article/details/85259825