2012-03-25 35 views
0

在我的應用程序的登錄控件中,如果登錄失敗,我將顯示一個對話框窗口。通過這種方式:刪除由ClientScript.RegisterStartupScript添加的腳本

protected void EMSLogin_Authenticate(object sender, AuthenticateEventArgs e) { 
    log.Info("=============INSIDE EMSLogin_Authenticate======"); 
    RadTextBox UserName = EMSLogin.FindControl("UserName") as RadTextBox; 
    RadTextBox Password = EMSLogin.FindControl("Password") as RadTextBox; 

    if (Membership.ValidateUser(UserName.Text, Password.Text)) { 
     FormsAuthentication.RedirectFromLoginPage(UserName.Text, false); 
    } else { 
     ClientScript.RegisterStartupScript(typeof(ScriptManager), "CallShowDialog", "showDialog();", true);   
    } 
} 

的JavaScript是:

function showDialog() { 
    $(document).ready(function() { 
     $(".jym").dialog("open"); 
    }); 
} 

現在如果登錄失敗的對話框顯示。但問題是如果我刷新瀏覽器窗口,在一次登錄失敗後,對話框再次打開,因爲$(".jym").dialog("open")寫在頁面中。然後我試了

protected void Page_Unload(object sender, EventArgs e) {   
    log.Info("=============INSIDE Page_Unload======"); 
    ClientScript.RegisterStartupScript(typeof(ScriptManager), "CallShowDialog", "", true); 
} 

但是沒有運氣。

有什麼辦法可以解決這個問題嗎?


如果我使用ClientScript.RegisterClientScriptBlock()這不起作用,我的意思是對話框不會打開時出錯。

回答

3

嘗試調用該函數:

ClientScript.RegisterStartupScript(typeof(ScriptManager), "CallShowDialog", "", true); 

...在Page_Load事件處理程序。

Page_Load發生在按鈕單擊事件處理程序之前。您可以通過添加以下代碼,看在調試/輸出窗口,可以驗證這一點:

protected void Page_Load(object sender, EventArgs e) 
{ 
    System.Diagnostics.Debug.WriteLine("Page_Load"); 
} 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    System.Diagnostics.Debug.WriteLine("Button1_Click");  
} 

所以刪除腳本在Page_Load事件處理程序應清除被加載任何以前的腳本。

+0

感謝您的回覆。但它不起作用。我的意思是,如果我在Page_Load中添加此行,然後回發後對話框窗口不可見。 – 2012-03-25 15:22:11

+0

你的兩個函數都在工作,你需要在服務器上按照正確的順序來獲取它們。 – 2012-03-25 15:27:20

+0

通過記錄,我看到Page_Load正在執行,然後單擊登錄按鈕時執行EMSLogin_Authenticate。你能告訴我會是什麼順序嗎? – 2012-03-25 15:34:16

相關問題