0

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 投稿を介して呼び出されることに注意してください。

4

1 に答える 1