1

我已經創建了一個靜態方法,以便在頁面和用戶控件上顯示我的網站上的彈出窗口。該方法不關心頁面上是否有腳本管理器或更新面板。用戶控件回發事件中的RegisterStartupScript

目前的工作方法正確:

  • 頁面加載
  • 頁的PreRender
  • 頁事件處理程序(如的OnClick,OnSelectedIndexChanged等)
  • 用戶控件加載
  • 用戶控件PreRender

會見hod失敗:

  • UserControl事件處理程序(例如, OnClick,OnSelectedIndexChanged等)

這些列表都沒有用盡。

最奇怪的部分是該方法將在用戶控件的加載和預渲染事件中工作,並在OnClick事件中失敗。

這裏是靜態代碼:

private static Page CurrentPage 
    { 
     get 
     { 
      try 
      { 
       return (Page)HttpContext.Current.Handler; 
      } 
      catch 
      { 
       return null; 
      } 
     } 
    } 

    public static void ShowMessage(String Heading, String Message, String RedirectURL, Boolean AllowHTML) 
    { 
     if (CurrentPage != null) 
     { 
      try 
      { 
       String Script = "ShowCtMessagePopup('" + Heading + "', '" + Message + "', " + AllowHTML.ToString().ToLower() + ", " + (String.IsNullOrWhiteSpace(URL) ? "null" : "'" + URL + "'") + ");"; 

       try 
       { 
        ScriptManager sm = ScriptManager.GetCurrent(CurrentPage); 

        if (sm == null || sm.IsInAsyncPostBack) 
         CurrentPage.ClientScript.RegisterStartupScript(typeof(System.Web.UI.Page), "ErrorMessage", Script.ToString(), true); 
        else 
         CurrentPage.ClientScript.RegisterStartupScript(typeof(System.Web.UI.Page), "ErrorMessage", "Sys.Application.add_load(function(){" + Script.ToString() + "});", true); 
       } 
       catch 
       { 
        //trouble finding script manager 
        CurrentPage.ClientScript.RegisterStartupScript(typeof(System.Web.UI.Page), "ErrorMessage", Script.ToString(), true); 
       } 
      } 
      catch 
      { 
       //ignore failed displays for now 
      } 
     } 
    } 

下面是調用代碼:

<asp:Button ID="btValidate" runat="server" OnClick="btValidate_Click" Text="Validate" Width="125px" CssClass="formButton" /> 

protected void btValidate_Click(object sender, EventArgs e) 
{ 
    CtMessagePopup.ShowMessage("Hello", "There", null, false); 
} 

回答

4

這個問題的解決方法是使用下面的代碼:

Control Caller = this; //the user control that you are calling from 
ScriptManager.RegisterStartupScript(Caller, typeof(Caller), "Script Name", Script.ToString(), true); 

的腳本管理器無法從用戶控件向頁面對象添加腳本,並且必須具有對調用用途的引用r控制。

相關問題