2012-03-15 61 views
0

基本上,我們對MasterPage中的.Visible = false存在的通知消息框有個「幻覺」。當談到時間在框中顯示的消息,我們運行,看起來像這樣的方法:使用JavaScript更改頁面狀態,舊狀態在回發中調用

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巫術,我們最終似乎是一個浮動消息框,因爲頁面的其餘部分顯示爲灰色。這個消息框有一個「關閉」按鈕來關閉「彈出」並恢復調光器,使該站點返回到「正常」視覺狀態。我們在母版的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()之前的方式「記住」這些div的狀態JavaScri pt被執行了。換句話說,在DisplayNotificationMessage()方法初始調用後的每次回發都會導致頁面返回到divmsgpanel.Visible = true和divdimmer.Visible = true,從而創建一個無限煩人的消息框,在每次回發時都會彈出錯誤消息框。

問題:

因爲我們想讓關閉功能保持客戶端JavaScript,我們怎麼能「通知」頁面停止恢復舊態上回發,只是這兩個div?

回答

2

你可以嘗試在Master_Page Load事件中將它們設置爲Visible = false嗎?它應該隱藏它們,並重新顯示它們只是當你打電話DisplayNotificationMessage

+0

Omg,謝謝!這工作。哇,現在很痛苦。非常感謝。 – CptSupermrkt 2012-03-15 08:00:01