C# クラスから Javascript アラートを表示するスクリプト ブロックを登録するコードを次に示します。
public static void MessageBox(string strMessage)
{
// Gets the executing web page
Page page = HttpContext.Current.CurrentHandler as Page;
string script = string.Format("alert('{0}');", strMessage);
// Only show the alert if it's not already added to the
if (page != null && !page.ClientScript.IsClientScriptBlockRegistered("alert"))
{
page.ClientScript.RegisterClientScriptBlock(page.GetType(), "alert", script, true /* addScriptTags */);
}
}
これは、DOM が完全に読み込まれる前MessageBox
に関数を呼び出すとうまく機能します。ただし、DOM が完全にロードされた後にこの関数を動的に呼び出すと (例: ユーザーが送信を押してエラーが発生した場合) 、アラートはポップアップしません。
DOM が完全にロードされる前の最初の呼び出しが機能するのに、DOM がロードされた後に行われた同じ呼び出しが機能しない理由はありますか?
編集:
コメントで以下のリンクをチェックした後、私はそれを試してみました:
Page page = HttpContext.Current.CurrentHandler as Page;
ScriptManager.RegisterClientScriptBlock(page, typeof(Page), "MyScript", "alert('heyyyyyy');", true);
AJAX呼び出しを処理するためのものですがScriptManager
、これは上記の最初の試みと同じ結果をもたらします。Javascript アラートは、最初のページの読み込み時に表示されますが、二度と表示されません (私の AJAX 要求では)。
編集 (2):
これが私のMessageBox
機能です:
public static void MessageBox(string strMessage)
{
Page page = HttpContext.Current.CurrentHandler as Page;
ScriptManager.RegisterClientScriptBlock(page, typeof(Page), "MyScript", "alert('heyyyyyy');", true);
}
ここに私がそれを呼ぶ1つの場所があります:
public static string GetLoggedOnUserId(string strLogonUser)
{
string strUserId = string.Empty;
try
{
MessageBox("hey");
int intPositionOfSlash = strLogonUser.IndexOf("\\");
strUserId = strLogonUser.Substring(intPositionOfSlash + 1, 6).ToUpper();
}
catch (Exception ex)
{
ErrorHandler('B', ex);
}
strLoggedOnUser = strUserId;
return strUserId;
}
そして、この呼び出しにより、アラートがポップアップ表示されます (最初のページの読み込みであるため)。
MessageBox
関数を呼び出すのは 2 回目です。
public static string LoadListItems(string strListItemStoredProcedureName, string strConnectionString)
{
try {
string strSQLQuery = " EXE " + strListItemStoredProcedureName.Trim() + " ";
SqlCommand objCommand = new SqlCommand(strSQLQuery, objConnection);
// other code here...
}
catch (Exception ex) {
MessageBox("error");
}
}
この呼び出しはアラートをポップアップ表示しません... この関数は、ページのリロードではなく、AJAX 投稿を介して呼び出されることに注意してください。