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);
}