2013-11-04 55 views
0

這裏是我的代碼,我註冊一個腳本塊,從我的C#類顯示一個JavaScript警告:JavaScript警告從C#類

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

這個偉大的工程,當我打電話MessageBox功能的DOM已完全加載。但是,當我動態調用此函數(例如:如果用戶點擊提交併且發現錯誤) DOM已完全加載,警報不會彈出。

是否有一個原因,我最初的呼叫的DOM滿載的作品之前,而相同的呼叫後作出加載的DOM不起作用?

編輯:

檢查出在評論下面的鏈接後,我給它一個鏡頭:

Page page = HttpContext.Current.CurrentHandler as Page; 
ScriptManager.RegisterClientScriptBlock(page, typeof(Page), "MyScript", "alert('heyyyyyy');", true); 

雖然ScriptManager應該是用於處理AJAX調用,這將產生同樣的結果作爲我上面的原始嘗試。 Javascript警報會在初始頁面加載時彈出,但不會再次彈出(在我的任何AJAX請求上)。

EDIT(2):

這裏是我的MessageBox功能:

public static void MessageBox(string strMessage) 
{ 
    Page page = HttpContext.Current.CurrentHandler as Page; 
    ScriptManager.RegisterClientScriptBlock(page, typeof(Page), "MyScript", "alert('heyyyyyy');", true); 
} 

這裏是一個地方,我把它叫做:

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功能:

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發佈 - 不在頁面重新加載。

+0

DOM是什麼意思是完全加載?據我記得,所有的客戶端腳本都轉到HTML文檔中的一個地方,並且在頁面生命週期中添加它們(幾乎是:))無關緊要。有沒有JavaScript錯誤? – Ivancho

+0

沒有Javascript錯誤...我的意思是「完全加載DOM」:一旦所有的HTML/Javascript在我的瀏覽器中加載完成。 – FastTrack

+0

我想我可能已經找到了(或)[** reason **](http://www.codedigest.com/Articles/ASPNET/314_Multiple_Ways_to_Call_Javascript_Function_from_CodeBehind_in_ASPNet.aspx)。看起來像'RegisterClientScriptBlock'只在啓動時和隨後的頁面回發時觸發。 – FastTrack

回答