2013-10-24 32 views
0

我在ASP.Net頁面中有一系列複選框。每個複選框都會調用接受複選框ID作爲參數的單個函數。刪除一組複選框的代碼冗餘

問題是代碼現在是多餘的。有沒有一種方法來推廣代碼。附上以下示例代碼:

 protected void chkAddlDetails_CheckedChanged(object sender, EventArgs e) 
     { 
      if (chkAddlDetails.Checked == true) 
      { 
       blnShouldLock("chkAddlDetails"); 
       Panel9.Visible = true; 
      } 
      else 
      { 
       Panel9.Visible = false; 
      } 
     } 
     protected void chkDeValidate_CheckedChanged(object sender,EventArgs e) 
     { 
      if (chkDeValidate.Checked == true) 
      { 
       blnShouldLock("chkDeValidate"); 
       Panel10.Visible = true; 
      } 
      else 
      { 
       Panel10.Visible = false; 
      } 
     } 
     ............ 
     ............ and similar code repeats for other check boxes 

隨着複選框數量的增加,代碼正在擴展並變得更加冗餘。

任何人都可以協助有一個通用的代碼,以避免冗餘。欣賞是否可以提供僞代碼。

謝謝。

回答

0

對所有複選框使用相同的事件。然後,您可以將sender投射到發起該事件的CheckBox

如果每個面板都對應一個複選框,則可以使用複選框的名稱命名面板,並將其後綴爲「Panel」。例如,名爲chkDevalidate的複選框可能有一個名爲chkDevalidatePanel的面板,下面的方法應該適用於所有複選框。如果同一面板被多個複選框顯示或隱藏,則需要使用Dictionary或類似軟件將它們映射到彼此之間。

protected void GenericCheckedChanged(object sender, EventArgs e) 
{ 
    CheckBox checkbox = (CheckBox)sender; 
    Panel panel = (Panel)Page.FindControl(checkbox.ID + "Panel"); 

    if (checkbox.Checked) 
    { 
     blnShouldLock(checkbox.ID); 
     panel.Visible = true; 
    } 
    else 
    { 
     panel.Visible = false; 
    } 
} 
+0

極好的格雷格!欣賞快速解決方案 –

+0

嗨格雷格 - 我已經準備好提供通用處理的功能。但是,當我點擊複選框時,這個函數沒有被調用。任何想法爲什麼這可能會發生。 –

+0

你怎麼知道它沒有被調用,你添加了一個斷點?如果是這樣,你確定它被設置爲複選框的OnCheckedChanged事件嗎? – greg84

0

或沒有if。

panel.Visible = checkbox.Checked