• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • ASP.NET服務器控件發送腳本(3)

    發表于:2007-06-30來源:作者:點擊數: 標簽:
    您現在的位置:天新網 > 軟件開發 > .Net開發 > ASP.NET ASP.NET 服務器 控件發送腳本 http://dev.21tx.com 2003年11月05日 微軟 上一頁 1 2 3 4 下一頁 從 ASP.net 服務器控件發送客戶端腳本塊 請記住,ReGISterStartupScript() 和 RegisterClientScriptBlo
         您現在的位置:天新網 > 軟件開發 > .Net開發 > ASP.NET
      ASP.NET服務器控件發送腳本
      http://dev.21tx.com 2003年11月05日 微軟
      
      
      
      
      
      
      
      
      
      上一頁 1 2 3 4 下一頁
      
        從 ASP.net 服務器控件發送客戶端腳本塊
      
        請記住,ReGISterStartupScript() 和 RegisterClientScriptBlock() 方法是 System.Web.UI.Page 類的方法。幸運的是,可以容易地從 ASP.NET 服務器控件調用這兩個方法,因為 System.Web.UI.Control 類(所有 ASP.NET 服務器控件都直接或間接地從這個類導出)有一個包含對 Page 實例的引用的 Page 屬性,而這個 Page 實例包含服務器控件。因此,要從 ASP.NET 服務器控件添加客戶端腳本塊,您只需使用下面的語法:
      
      
      this.Page.RegisterClientScriptBlock(key, script);
      
        通常,添加客戶端腳本塊這個任務會使用 OnPreRender() 方法來處理,這個方法在控件生命周期的預呈現階段執行。
      
        讓我們創建一個只顯示客戶端彈出式對話框的 ASP.NET 服務器控件。此示例將說明構建一個發送客戶端腳本的控件是很容易的。
      
        首先,在 Microsoft? Visual Studio? .NET 中創建一個新的 Web Control Library(Web 控件庫)項目。這將創建一個只有一個類的新項目,這個類從 System.Web.UI.WebControls.WebControl 導出。但是,我們希望這個類從 System.Web.UI.Control 類導出。為什么呢?因為 WebControl 類用于支持顯示為 HTML 元素的服務器控件,而 Control 類則用于不會顯示為 HTML 元素的服務器控件。
      
        大多數內置的 ASP.NET 服務器控件都會發送一個 HTML 元素。例如,TextBox Web 控件發送一個 <input> 元素,其類型屬性設置為 text;DataGrid Web 控件發送一個 <table> 元素,為每條要顯示的記錄發送 <tr> 元素,為每個字段發送 <td> 列。但是,不是所有的控件都需要發送 HTML 元素。例如,Literal 控件只是按原樣輸出它的 Text 屬性,而不將這個屬性放在 HTML 元素中。同樣,Repeater 也不將其輸出放在 HTML 元素中。那些顯示為 HTML 元素的服務器控件,如 TextBox、Button、DataGrid 等等,是從 System.Web.UI.WebControls.WebControl 類導出的,而那些不產生 HTML 元素的控件,如 Literal、Repeater 等,是從 System.Web.UI.Control 類導出的。
      
        既然我們要創建的服務器控件不可見(它只是發送一個顯示彈出式控件的客戶端腳本塊),這個控件最好從 System.Web.UI.Control 導出,而不是從 System.Web.UI.WebControls.WebControl 導出。
      
        這個控件只需要兩個屬性:
      
        PopupMessage - 表示要在彈出式對話框中顯示的消息的字符串。
      
        Enabled - 表示是否啟用控件的布爾值。如果啟用控件,則顯示彈出式對話框,否則不顯示。(必須添加一個 Enabled 屬性,是因為導出該控件的 Control 類不包括 Enabled 屬性,此屬性只是隱含地由那些從 WebControl 導出的控件使用。)
      
        除了這兩種屬性之外,我們需要覆蓋 OnPreRender() 方法。在這里,我們需要調用 RegisterStartupScript(),并傳遞控件唯一的關鍵字和恰當的客戶端腳本以顯示彈出式對話框。這個類的完整代碼如下所示:
      
      
      using System;
      using System.Web.UI;
      using System.Web.UI.WebControls;
      using System.ComponentModel;
      
      namespace ClientSideScript
      {
      /// <summary>
      /// WebCustomControl1 的摘要描述。
      /// </summary>
      [DefaultProperty("Text"),
      ToolboxData("<{0}:PopupGreeting runat=server></{0}:PopupGreeting>")]
      public class PopupGreeting : System.Web.UI.Control
      {
      [Bindable(true),
      Category("Appearance"),
      DefaultValue("")]
      public string PopupMessage
      {
      get
      {
      // 檢查 ViewState 中是否存在該項目
      object popupMessage = this.ViewState["PopupMessage"];
      if (popupMessage != null)
      return this.ViewState["PopupMessage"].ToString();
      else
      return "Welcome to my Web site!";
      }
      
      set
      {
      // 指定 ViewState 變量
      ViewState["PopupMessage"] = value;
      }
      }
      
      [Bindable(true),
      Category("Appearance"),
      DefaultValue("")]
      public bool Enabled
      {
      get
      {
      // 檢查 ViewState 中是否存在該項目
      object enabled = this.ViewState["Enabled"];
      if (enabled != null)
      return (bool) this.ViewState["Enabled"];
      else
      return true;
      }
      
      set
      {
      // 指定 ViewState 變量
      ViewState["Enabled"] = value;
      }
      }
      protected override void OnPreRender(EventArgs e)
      {
      base.OnPreRender(e);
      
      string scriptKey = "intoPopupMessage:" + this.UniqueID;
      
      if (!Page.IsStartupScriptRegistered(scriptKey) && this.Enabled &&
      !Page.IsPostBack)
      {
      string scriptBlock =
      @"<script language=""JavaScript"">
      <!--
      alert(""%%POPUP_MESSAGE%%"");
      // -->
      </script>";
      scriptBlock = scriptBlock.Replace("%%POPUP_MESSAGE%%", this.PopupMessage);
      
      Page.RegisterStartupScript(scriptKey, scriptBlock);
      }
      }
      }
      }
      
        請記住下面兩件事:首先,Enabled 和 PopupMessage 屬性保存在 ViewState 中,這樣在回傳時這些值可以始終保持一致; 其次,在 OnPreRender() 方法中,用于腳本塊的關鍵字是文本 intoPopupMessage: 加上控件的 UniqueID 屬性。如果使用一個硬編碼的關鍵字,則當頁面中有多個控件時,只有第一個控件能夠注冊其腳本塊,因此只顯示一個彈出式對話框。通過在腳本塊關鍵字中使用 UniqueID,就能保證該控件的每個實例都能獲取其腳本塊。
      
        在注冊腳本塊之前,代碼首先檢查三個條件:
      
        沒有使用同一關鍵字注冊的腳本。這當然是不可能的,因為每個控件實例都應該有一個 UniqueID 屬性值。但是,不妨先練習使用 IsStartupScriptRegistered() 方法,然后再花時間創建和注冊啟動腳本。
      
        控件的 Enabled 屬性為 True。
      
        頁面沒有被回傳。這段代碼只允許彈出式對話框在第一次加載頁面時顯示,而不是在每次回傳頁面時都顯示。我們還可以增添更為靈活的功能,即為該控件添加一個布爾屬性,以允許用戶指定是否在回傳時也生成彈出式對話框。
      
        如果滿足這三個條件,則腳本被指定,并且 PopupMessage 屬性值被插入到腳本中適當的位置。最后,調用 Page 屬性的 RegisterStartupScript() 方法,傳入關鍵字及腳本代碼。
      
        PopupGreeting 代碼可以從本文結尾處提供的下載中獲得。該下載包括名為 ClientSideControlsAndTester 的 Visual Studio .NET 解決方案,其中包含兩個項目:
      
        ClientSideControls,包含 PopupGreeting 服務器控件
      
        ClientSideTester,包括一個為測試 ClientSideControls 而設計的 ASP.NET Web 應用程序
      ClientSideControls 項目編譯后的程序集名為 ClientSideControls.dll。要在您自己的 ASP.NET Web 應用程序中使用 PopupGreeting 服務器控件,請將 ClientSideControls.dll 文件添加到您的 Web 應用程序的引用中。然后,在設計器中,右鍵單擊 Toolbox(工具箱)并選擇“Add/Remove Items . . .”(添加/刪除項),再次選擇 ClientSideControls.dll 文件。這樣就向 Toolbox(工具箱)中添加了名為 PopupGreeting 的新項。然后,您可以從 Toolbox(工具箱)將該控件拖到設計器中。
      
        圖2顯示了 PopupGreeting 控件添加到 Toolbox(工具箱)并添加到設計器后,Visual Studio .NET 的屏幕快照。Toolbox(工具箱)中的 PopupGreeting 控件用紅色線圈出,設計器中的 PopupGreeting 輸出用藍色線圈出,在屏幕快照右側的“Properties”(屬性)窗格中可以查看 PopupGreeting 的屬性。
      
      
      
      

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>