2010-06-11 25 views
1

我在C#中爲3.5開發了一個ASP.Net Server自定義控件。命名爲「myCheckBoxList」,它繼承自CheckBoxList的Web控件。多個Custome控件無法正常工作

工作很簡單。它只是作爲一個兩選項複選框按鈕。我採取了一個CheckBoxList,總是會顯示兩個複選框。工作是這樣的,當一個複選框被選中時,另一個應該被取消選中,反之亦然。

只有當我在網頁上放置該控件的一個實例時,該控件才能完美工作。如果我放置多個控件的實例,那麼它不起作用。

+0

什麼「不工作」?你是否得到了一個特定的錯誤,是你的邏輯運作的一部分,等等。難以讓任何人在沒有指出問題的情況下給你一個答案。 – RPM1984 2010-06-11 09:05:54

回答

0

爲什麼不使用單選按鈕?您正在嘗試重新創建已存在的控件的功能。如果你喜歡,你可以將它們看起來像複選框,但大多數用戶知道單選按鈕的功能以及它們的行爲方式。
請嘗試以下操作。它會重新創建您在評論中描述的行爲。如果您需要爲多個組執行此操作,則需要爲每個組定義一個currentSelection變量,併爲每個組定義一個不同的類,但這可能是一個巧妙的方法。我會留給你去試驗。也許已經把它包裝在一個控件中,並且爲每個contriol生成var和document.ready函數。儘管只添加jquery-1.4.1.js引用。

<script type="text/javascript" src="/js/jquery-1.4.1.min.js"></script> 

<script type="text/javascript" language="javascript"> 
var currentSelection; 
$(document).ready(function() { 
    $(".radio").click(function() { 
     if (currentSelection == this.id) { 
      this.checked = false; 
     } 
     else { 
      currentSelection = this.id; 
     } 
    }); 
}); 
</script>   

<asp:RadioButton id="rb" runat="server" /> 
<asp:RadioButton id="rb1" runat="server" /> 

代碼隱藏:

rb.InputAttributes.Add("class", "radio"); 
rb1.InputAttributes.Add("class", "radio"); 
+0

非常感謝您的回覆。 丹尼爾,你是對的。但是一旦我們選擇了任何選項,我們就不能在單選按鈕中再次取消選中。對?我的意思是,如果我有兩個單選按鈕,最初都沒有取消選中,一旦我檢查(選擇)其中的任何一個,我不能再次取消選擇。我想要使​​用複選框可以獲得的功能。 – Kamlesh 2010-06-11 09:56:11

+0

這仍然可以通過在單選按鈕的單擊事件上放置一個JavaScript來完成。如果已經點擊了單選按鈕,請設置checked = false;使用JQuery選擇器來標識單選按鈕,並將click事件掛接到該函數。它應該是大約5行的JQuery。一行,如果你不關心可讀性。 – 2010-06-11 10:14:09

+0

謝謝丹尼爾給我你好的建議。這是與單選按鈕,但我嚴格要使用checkboxlist控件。毫無疑問,你的建議將對我有所幫助。再一次感謝你。 – Kamlesh 2010-06-11 13:26:29

0

它成爲我的案例之一。我正在努力在c#中爲3.5開發Web服務器客戶端控件。這個客戶控制由checkboxlist繼承。我只將一個JavaScript函數「ClickMe()」放了一次(這是很明顯的說法)。當我在網頁上放置多個控件時,在運行時,它會爲每個控件通過同名「ClickMe()」函數創建javascript函數。這是瓶頸。

最後,我決定爲每個控件分別編寫這個javascript函數,但是在運行時。爲此,我將這個ID與「ClickMe()」連接起來。 (像this this.ID +「ClickMe()」)。我得到了解決方案。