2013-02-20 105 views
1

我有一個button其中突出的第一點擊。在點擊它應該重置回相同的顏色。我正在使用booleanisSelected來確定它是否突出顯示。該按鈕被突出顯示,但不知何故它不會恢復到原來的顏色。任何幫助,將不勝感激。如何重置按鈕顏色第二次點擊ASP.net?

我decalring isSelected爲private bool isSelected = false;

按鈕事件處理函數

protected void Button2_Click(object sender, EventArgs e) 
    { 
     if (!isSelected) 
     { 
      isSelected = true; 
      Styles.buttonHighlight(Button2); 
     } 
     else 
     { 
      isSelected = false; 
      Styles.buttonReset(Button2); 
     } 
    } 

造型方法

public static void buttonHighlight(Button button) 
    { 
     button.BackColor = Color.Blue; 
     button.ForeColor = Color.White; 
    } 
    public static void buttonReset(Button button) 
    { 
     button.BackColor = ColorTranslator.FromHtml("#ffffff"); 
     button.ForeColor = ColorTranslator.FromHtml("#848484"); 
    } 
+0

'isSelected'在哪裏存儲? – 2013-02-20 00:33:46

+0

@SystemDown它聲明的事件處理程序外 – DarknessBeginsHere 2013-02-20 00:34:43

+0

我會切換使用JavaScript的CSS類。但這只是我:) – 2013-02-20 00:40:13

回答

1

你試圖挽救回發之間的可變的狀態...這並不像你想象的那麼簡單......
在你的情況,你的下一個回發(該按鈕被點擊下一次)又回到了假,因爲變量被重新每回發聲明(它是在這種情況下,原來的false值)設置IsSelected = true呢。 Asp.Net基本上是無狀態的。

你可以通過保存在IsSelected解決這個問題的SessionViewState甚至爲hiddenfield ...

我覺得ViewState的應該是足夠您的需求...

protected void Button2_Click(object sender, EventArgs e) 
{ 
    bool selected = false; 

    if (ViewState["IsSelected"] != null) 
    { 
     selected = (bool) ViewState["IsSelected"]; 
    } 

    if (!selected) 
    { 
     ViewState["IsSelected"] = true; 
     Styles.buttonHighlight(Button2); 
    } 
    else 
    { 
     ViewState["IsSelected"] = false; 
     Styles.buttonReset(Button2); 
    } 
} 

使用Session是完全一樣的,只是在上面的代碼更改ViewStateSession。你應該讀一些關於他們之間的差異(我添加了鏈接),看看哪些最符合你的需求。

+0

@Blachsma如果我將它包含在AJAX'updatePanel'下,我還需要將它存儲在會話變量? – DarknessBeginsHere 2013-02-20 00:47:14

+0

UpdatePanel實際上並未對會話變量進行更改。它*可以*有一個影響,如果你將它保存在一個隱藏的領域(例如updatepanel之外) – Blachshma 2013-02-20 00:49:05

+0

謝謝! +1並接受 – DarknessBeginsHere 2013-02-20 00:57:51

1

這裏的問題:isSelected將永遠是假的。

你必須要記住的ASP.NET(和一般的Web應用程序)的事情是,一切是無狀態的。這基本上意味着爲每個回發創建一個新的頁面實例。而且由於isSelected是該類中的一個變量,因此它也將被再次實例化,並且其先前的值將不會被存儲。

那麼,如何解決這個問題?您在某處存儲isSelected的值。您可以使用會話變量(存儲在服務器內存中)或最好是ViewState變量(它們存儲在頁面文本本身中)。你可以做isSelected與getter和setter像這樣的屬性:

private bool isSelected 
{ 
    get 
    { 
     if(ViewState["isSelected"] != null && ViewState["isSelected"] is bool) 
      return (bool)ViewState["isSelected"]; 
     else 
      return false; 
    } 
    set 
    { 
     ViewState["isSelected"] = value; 
    } 

} 

使用ViewState中會要求的ViewState被打開,這是默認。另一種可能性是將isSelected的內容存儲在隱藏字段控件(在後臺也使用ViewState)中。

+0

謝謝!但我不得不接受Blachshma becaz他早些時候回答 – DarknessBeginsHere 2013-02-20 00:56:39

+0

@DarknessBeginsHere--沒問題。很高興我們可以解決您的問題。 – 2013-02-20 17:49:31

相關問題