1

静的メソッドを作成して、自分のWebサイトにページとユーザーコントロールの両方からポップアップを表示しました。このメソッドは、ページにスクリプトマネージャまたは更新パネルがあるかどうかは気にしません。方法はで正しく動作する瞬間RegisterStartupScript in Usercontrolポストバックイベント

  • ページの読み込み
  • ページのPreRender
  • ページイベントハンドラ(例えばクリック時、OnSelectedIndexChangedなど)
  • ユーザーコントロールのロード
  • ユーザーコントロールプレレンダー

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制御。

関連する問題