2009-02-07 119 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