2009-02-07 121 views
1

我在同一主題上看到了幾個類似的問題,但是他們都沒有解決我的問題。Javascript確認對話框 - ASP.NET

我有一個asp.net網站,並希望在數據庫更新後向用戶顯示一條狀態消息(asp:標籤,它將在5秒內消失)。

我想將文本分配給標籤,然後用javascript隱藏它。

我把js部分整理出來了,唯一的問題是我在給控件分配文本後如何調用js函數?

讓我們說我更新數據庫中一些與下面的代碼:

<asp:Button ID="btnUploadFiles" runat="server" OnClick="buttonSubmit_Click" Text="Update" /> 

代碼背後

protected void buttonSubmit_Click(object sender, EventArgs e) 
    { try{// update the database 
      // change label text to tell the user update succeeded} 
     catch(Exception ex){...} 
    } 

請幫助!

UPDATE:沒有jQuery,請,只是簡單的JavaScript

+0

這裏列出的非jQuery解決方案最終可能會失敗,因爲當您隱藏元素時DOM未加載。即使你還不知道,你最好還是使用框架。 – tvanfosson 2009-02-08 05:43:24

+0

如果您不想使用框架或編寫等效的代碼,至少應該將腳本放在頁面的底部(而不是頭部),並在所有HTML被解析後運行。這可能會在這種情況下可靠地工作,但不適用於所有類型的操縱。 – tvanfosson 2009-02-08 05:45:03

回答

2

回答你的問題「我將文本分配給控件後,如何調用js函數?」。您可以在按鈕點擊事件中添加對「RegisterClientScriptBlock」的調用,以輸出由Luke提供的JavaScript。

protected void buttonSubmit_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     // update the database 
     // change label text to tell the user update succeeded 
     label.Text = "Message"; 
     string js = "function hideLabel(){document.getElementById('" + label.ClientID + "').style.display = 'none'};setTimeout(hideLabel, 5000);" 
     ClientScript.RegisterClientScriptBlock(this.GetType(), "test", js ,true); 
    } 
    catch(Exception ex){...} 
} 
0

你是通過Ajax還是普通的回發回發?如果這是一個普通的回發,只需在設置定時器的頁面上註冊一些javascript,並在定時器到期後調用隱藏標籤的函數。以下示例使用jQuery確保在啓動定時器之前加載DOM,但還有其他方法。它會在5秒後隱藏標籤。

function hideLabel(label) 
{ 
    $(label).hide(); 
} 

$(document).ready(function() { 
    var label = $('#labelID'); 
    setTimer(function() { hideLabel(label);),5000); 
}); 

的想法是基本相同的,如果你正在使用AJAX,除非你設置的的onSuccess回調計時器的AJAX調用,而不是在文檔加載。

+0

請不要jQuery,那麼一些普通的JS怎麼樣? – 2009-02-07 23:09:16

3

我個人使用jQuery這一點,但如果你想使用普通的舊JavaScript,然後再像這樣可能會做的伎倆:

<script type="text/javascript"> 
function hideLabel() 
{ 
    // replace yourLabelID with <%=YourLabelID.ClientID%> if it's a .NET Label control 
    document.getElementById('yourLabelID').style.display = 'none'; 
} 
setTimeout('hideLabel()', 5000); 
</script> 

如果需要,您還可以嵌入腳本塊中Literal控件,並且只有在更新標籤文本時纔可見。

+0

您不需要將'hideLabel()'作爲字符串傳遞。您可以將setTimeout引用傳遞給該函數:「setTimeout(hideLabel,5000);」。它在這種情況下沒有太大的區別,因爲它是一個常量的一次調用,但最好避免執行字符串。 – 2009-02-07 23:31:36