2011-06-13 237 views
1

我目前正在使用C#編寫asp.net,我需要顯示一個消息框並確認來自用戶的輸入並重定向到另一個頁面,我的代碼如下所示:Javascript被忽略,因爲Response.Redirect()

protected void Button1_Click(object sender, EventArgs e) 
{ 
    System.Text.StringBuilder sb = new System.Text.StringBuilder(); 
    sb.Append("<script language='javascript'>"); 
    sb.Append("if (confirm('YES OR NO?')){ /*some javascript code*/ }"); 
    sb.Append("</script>"); 

    Page.RegisterStartupScript("FocusScript", sb.ToString()); 
    Response.Redirect("Default.aspx"); 

} 

這裏問題是直接重定向到下一個頁面而不顯示消息框。 如果我刪除Response.Redirect("Default.aspx");它顯示消息框成功。我想這裏可能是被Response.Redirect()具有較高的優先級比javascript

我嘗試使用

sb.Append("if (confirm('YES OR NO?')){ window.location.href = \"Default.aspx"; }\"); 

,而不是使用Response.Redirect()但頁面並沒有得到重定向,我應該怎麼做才能解決這個問題呢?

+0

是否Button1的放置的UpdatePanel?如果是這樣,請使用ScriptManager.RegisterStartupScript方法代替 – 2011-06-13 11:20:54

+1

Fyi,它是'type =「text/javascript」'而不是'language =「...」' – ThiefMaster 2011-06-13 11:21:17

+0

檢查你的反斜槓。我認爲它可能是這樣的: sb.Append(「if(confirm('YES or NO?')){window.location.href = \」Default.aspx \「;}」); – Grace 2011-06-13 12:07:09

回答

4

有一個在客戶端點擊事件中使用添加JavaScript的一個選項

例如: -

<asp:button id="Button1" OnClientClick="javascript:return confirm('Are you sure?');" runat="server" onclick="Button1_Click" /> 

然後在代碼端簡單地重定向頁面。

+0

'javascript:'不應該用於事件。它所做的只是定義一個標籤。 – Shurdoof 2011-06-13 11:58:05

-1

移動以下塊Page_Load

System.Text.StringBuilder sb = new System.Text.StringBuilder(); 
    sb.Append("<script language='javascript'>"); 
    sb.Append("if (confirm('YES OR NO?')){ /*some javascript code*/ }"); 
    sb.Append("</script>"); 

    Page.RegisterStartupScript("FocusScript", sb.ToString()); 

你很晚註冊腳本塊,這是不可用的按鈕,點擊之前客戶端,你在上buttonclick服務器端安裝它,這是太這類事件遲到了。

您可以使用如下代碼。

<asp:button id="Button1" 
     usesubmitbehavior="true" 
     text="Open Web site" 
     onclientclick="DoSomething()" 
     runat="server" onclick="Button1_Click" /> 
+0

但是,每次訪問該頁面時都會顯示確認彈出窗口,而不是僅在單擊該按鈕之後。 – DavidGouge 2011-06-13 11:19:14

+0

但我不想在Page_Load中顯示消息框,我希望在按鈕單擊事件時使用MessageBox,並根據用戶輸入重定向到其他頁面。 – 2011-06-13 11:22:24

+0

我更新了附加客戶端事件的代碼。 – PSK 2011-06-13 11:25:02

1

Confirm是一個JavaScript函數,它在客戶端執行。註冊後,您立即重定向到另一個頁面,因此該功能從不執行。

6

你絕對需要在服務器端處理這個問題嗎?事實上,這是一件相當簡單的事情變得混亂的地方。

如果你可以,例如,使用Javascript/jQuery的處理它,你可以不喜歡簡單的東西:

$('#Button1').click(function(){ 
    if (confirm("Yes or No?")){ 
     window.location = "/default.aspx"; 
    } 
}); 
+0

絕對如此。僅僅因爲您使用ASP .NET,不需要使用'RegisterStartupScript'。描述的行爲純粹是*客戶端*。 – 2011-06-13 11:28:53

0

我認爲最好在頁面加載時向按鈕添加一個屬性,並讓button_click函數僅僅重定向。像這樣的(頁面加載)的東西:

button.attribute.add("onclick","Javascript:confirmFunction();") 

在點擊按鈕只有這個:

protected void Button1_Click(object sender, EventArgs e) 
{  
    Response.Redirect("Default.aspx");  
} 

終於在JS有這樣的:

<script> 
function confirmFunction() 
{ 
    if(Confirm("Yes OR NO") 
     //Add your JS Code 
     return true; //will pass onto server 
    else 
     //Add your JS Code 
     return false; //will not go to server 
} 
</script> 

HTH

1

添加以下代碼on Page_Load

Button1.Attributes.Add("onclick", "if(confirm('do you want to redirect?')){}else{return false}"); 

現在你點擊按鈕會首先觸發java確認模態框。

爲UR Button1的單擊

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Response.Redirect("Default.aspx"); 
} 

的想法是 - 你的代碼隱藏Button1_Click事件將觸發用戶確認後,才通過單擊OK