我有一个JavaScript MessageBox,当我点击Repeater中的事件或刷新当前页面时,它会一直显示。
这是功能:
public myFunctions()
{
}
/** Display Successs/Error Message **/
public void DisplayUserMessage(string messageType, string messageString, Label ErrorMessageLabel)
{
ErrorMessageLabel.Visible = true;
ErrorMessageLabel.Text = "<b>" + messageType.Substring(0, 1).ToUpper() + messageType.Substring(1).ToLower() + ":</b> " + messageString;
ErrorMessageLabel.CssClass = messageType.ToLower() + "_message";
}
public void HideUserMessage(Label ErrorMessageLabel)
{
ErrorMessageLabel.Visible = false;
ErrorMessageLabel.Text = "";
ErrorMessageLabel.CssClass = "";
}
这是让它淡出的jquery:
$(document).ready(function () {
/** Success/Error Messages **/
$('.success_message').animate({ opacity: 1.0 }, 2000).fadeOut('slow');
$('.error_message').animate({ opacity: 1.0 }, 2000).fadeOut('slow');
});
这是在MasterPage上:
<!-- Message Box -->
<div id="msgBox" runat="server">
<asp:Label ID="ErrorMessageLabel" CssClass="" runat="server" Visible="false"></asp:Label>
</div>
以下是成功发生时代码隐藏中的脚本:
Label ErrorMessageLabel = (Label)Master.FindControl("ErrorMessageLabel");
new myFunctions().DisplayUserMessage("success", "Administrator Updated!", ErrorMessageLabel);
任何人都知道在点击其他按钮或刷新页面后如何阻止它不断显示?
答案 0 :(得分:1)
使用隐藏输入并在调用成功函数时设置值。所有其他时间重置该值。在文档就绪函数中检查隐藏元素的值,然后调用animate函数。
<input id="txtHidSuccess" type="hidden" runat="server" />
在页面加载
txtHidSuccess.Value = "0";
在成功/错误功能
中txtHidSuccess.Value = "1";
的jQuery
$(function(){
if ($("#txtHidSuccess").val() === "1") {
/** Success/Error Messages **/
$('.success_message').animate({ opacity: 1.0 }, 2000).fadeOut('slow');
$('.error_message').animate({ opacity: 1.0 }, 2000).fadeOut('slow');
}
});
答案 1 :(得分:0)
我看到你在哪里调用DisplayUserMessage(),但不是HideUserMessage()。我的猜测是,当你设置ErrorMessageLabel属性时,它们会存储在视图状态中,并在回发中保持不变。
您可以尝试使用常规div包装一些文本并使用CSS来隐藏它,而不是使用ASP.NET Label控件。当您的应用程序中出现成功事件时,您可以使用ClientScriptManager.RegisterStartupScript()将脚本写入显示div的客户端。然后,如果div可见,你的动画功能可以淡出div。
答案 2 :(得分:0)
if(IsPostBack)
new myFunctions().HideUserMessage(ErrorMessageLabel);
这很有用。谢谢@Harie