註冊起動指令碼,ASP.NET AJAX的一項重要功能!

來源:互聯網
上載者:User
ajax|asp.net|指令碼

    最近的項目中一直在使用Atlas July CTP,自從Atlas正式更名後,連續推出了Beta和Beta2兩個版本,但是我一直在觀望,原因就是Beta版本不穩定而且升級太麻煩了。一日偶然看到了楊丹的這篇隨筆,突然發現原來ScriptManager可以註冊在用戶端部分重新整理的UpdatePanel中註冊啟動後執行的javascript!這可是困擾了我很長時間的一個問題!這樣不但可以在使用UpdatePanel的情況下使用Javascript彈出對話方塊,也可以在開發使用Javascript指令碼的伺服器控制項的時候,使控制項的起動指令碼得以執行,這樣原來的和UpdatePanel不相容的控制項可以很容易的改為AJAX enabled^_^。
    不過,令人不解的是不知道處於什麼考慮,RegisterStartupScript函數竟然實現為了類的靜態函數,可是沒有ScriptManager的UpdatePanel更本不能執行啊,這樣還需要多打幾個字!另外,需要注意的是第一個參數是UpdatePanel的執行個體,如果在頁面中有多個UpdatePanel,如果每個UpdatePanel的UpdateMode都是“always”[預設值]的話,那麼你使用那個UpdatePanel的執行個體作為參數都可以;如果每個UpdaePanel的UpdateMode=conditional,那麼你必須使用正在更新的那個UpdatePanel作為參數,這樣指令碼才能起作用。下面是我作的一個簡單的樣本:
頁面標記
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
            <asp:ScriptManager ID="ScriptManager1" EnablePartialRendering="true" runat="server">
            </asp:ScriptManager>
            <br />
            <asp:updatepanel id="UpdatePanel1" UpdateMode="conditional"  runat="server"><ContentTemplate>
<asp:TextBox id="TextBox1" runat="server" ></asp:TextBox> <asp:LinkButton id="LinkButton1" runat="server" >LinkButton</asp:LinkButton>
</ContentTemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="LinkButton1" />   
                    </Triggers>
</asp:updatepanel>
            <asp:UpdatePanel ID="UpdatePanel2" RenderMode="block"  UpdateMode="always"  runat="server">
                <ContentTemplate>
                    <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
                    <asp:LinkButton ID="LinkButton2" runat="server" >LinkButton</asp:LinkButton>
                </ContentTemplate>
            </asp:UpdatePanel>
            <br />
        <div>
                    <br />
                    <asp:updateprogress id="UpdateProgress1" runat="server"><ProgressTemplate>
Please waiting, retrieving data from server
</ProgressTemplate>
</asp:updateprogress>
                     </div>
    </form>
</body>
</html>

代碼
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
       
  }
    protected void LinkButton1_Click(object sender, EventArgs e)
    {
        System.Threading.Thread.Sleep(1000);
        TextBox1.Text = DateTime.Now.ToLongTimeString();
        TextBox2.Text = TextBox1.Text;
        string js = "alert('ok button1 clicked!')";
        Microsoft.Web.UI.ScriptManager.RegisterStartupScript(UpdatePanel2, this.GetType(), "btn1clicked", js, true);
    }
    protected void LinkButton2_Click(object sender, EventArgs e)
    {
        System.Threading.Thread.Sleep(900);
        TextBox2.Text = DateTime.Now.ToLongTimeString();
        TextBox1.Text = TextBox2.Text;
        string js = "alert('ok button 2 clicked!')";
   
        Microsoft.Web.UI.ScriptManager.RegisterStartupScript(UpdatePanel2, this.GetType(), "btn2clicked", js, true);
   
    }
}    BTW,我在使用時發現一個問題,不知道是個Bug還是我使用不當,我在調試中發現UpdatePanel.IsInPartialRendering的值始終是false!希望有高人指點一下:)。

http://www.cnblogs.com/dajianshi/archive/2006/11/20/565524.html



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.