使用JavaScript更改页面状态,旧状态在回发时被调用

时间:2012-03-15 07:34:20

标签: c# javascript asp.net error-handling

基本上我们有一个通知消息框的“错觉”,在MasterPage中以.Visible = false存在。当需要在框中显示消息时,我们运行如下所示的方法:

public static void DisplayNotificationMessage(MasterPage master, string message)
{
   if (Master.FindControl("divmsgpanel") != null)
   {
      master.FindControl("divmsgpanel").Visible = true;
   }

   if (master.FindControl("divdimmer") != null)
   {
      master.FindControl("divdimmer").Visible = true;
   }

   TextBox thetxtbox = (TextBox)master.FindControl("txtboxmsgcontents");

   if (thetxtbox != null)
   {
      thetxtbox.Text = message;
   }

}

基本上通过我们的设计师非常棒的CSS伏都教,我们最终会看到一个浮动的消息框,因为页面的其余部分显示为暗淡。此消息框有一个“关闭”按钮,用于关闭“弹出窗口”并恢复调光器,使站点返回“正常”视觉状态。我们使用MasterPage中的JavaScript完成此任务:

    function HideMessage() {
        document.getElementById("<%# divmsgpanel.ClientID %>").style.display = 'none';
        document.getElementById("<%# divdimmer.ClientID %>").style.display = 'none';
        return false;
    }

并且.aspx页面中的按钮声明调用此HideMessage()函数OnClientClick:

    <asp:Button ID="btnmsgcloser" runat="server" Text="Close" style="margin: 5px;"
    OnClientClick="return HideMessage()" />

问题:

所有未来的回发都会导致MasterPage在执行HideMessage()JavaScript之前“记住”这些div的状态。换句话说,在DisplayNotificationMessage()方法的初始调用之后的每一个回发都会导致页面返回到divmsgpanel.Visible = true和divdimmer.Visible = true,从而创建一个无休止的烦人消息框,在每次回发时都会错误地弹出。

问题:

由于我们希望Close函数保留客户端JavaScript,我们怎样才能“通知”页面停止恢复到回发时的旧状态,仅仅这两个div?

1 个答案:

答案 0 :(得分:2)

您可以尝试在Master_Page Load事件中将它们设置为Visible = false吗?它应该隐藏它们并在调用DisplayNotificationMessage

时重新显示它们