這裏是我的代碼,我註冊一個腳本塊,從我的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發佈 - 不在頁面重新加載。
DOM是什麼意思是完全加載?據我記得,所有的客戶端腳本都轉到HTML文檔中的一個地方,並且在頁面生命週期中添加它們(幾乎是:))無關緊要。有沒有JavaScript錯誤? – Ivancho
沒有Javascript錯誤...我的意思是「完全加載DOM」:一旦所有的HTML/Javascript在我的瀏覽器中加載完成。 – FastTrack
我想我可能已經找到了(或)[** reason **](http://www.codedigest.com/Articles/ASPNET/314_Multiple_Ways_to_Call_Javascript_Function_from_CodeBehind_in_ASPNet.aspx)。看起來像'RegisterClientScriptBlock'只在啓動時和隨後的頁面回發時觸發。 – FastTrack