我知道這個問題有點老了,但我認爲這可能有助於某人,因此發佈我的解決方案,以解決這個問題。
這個問題有兩個部分:
- 爲了防止多個單選按鈕的選擇在同一時間。
- 瞭解在服務器端代碼中單擊了哪個單選按鈕。
我在Repeater中的單選按鈕有類似的問題。我在這裏找到部分解決方案: Simple fix for Radio Button controls in an ASP.NET Repeater using jQuery
請閱讀上面的文章以瞭解問題。我提到這篇文章,這是很好的幫助。如上所述,這個問題有兩個部分,一是防止一次選擇多個單選按鈕。其次,要知道在服務器端代碼中單擊了哪個單選按鈕。上面的文章中發佈的解決方案僅適用於第一部分。但是,在那裏寫的代碼以及在那裏發佈的解決方案的更新對我來說都不起作用。所以我不得不修改它以使其工作。這是我的解決方案。
我想用投票按鈕創建投票。我的單選按鈕(ID)的名稱是PollGroupValue,並將組名設置爲中繼器中的PollGroup。記住ASP.net中的Groupname屬性在生成的html中呈現爲name屬性。我的代碼如下:
<script type="text/javascript">
/* Step-01: */
$(document).ready(function() {
/* Step-02: */
$("[name*='PollGroup']").each(function() {
$(this).attr('ci-name', $(this).attr('name'));
});
/* Step-03: */
$("[name*='PollGroup']").attr("name", $("[name*='PollGroup']").attr("name"));
$('#Poll1_BtnVote').click(function (e) {
/* Step - 04: */
if ($("[name*='PollGroup']").filter(':checked').length == 0) {
alert('Please select an option.');
e.preventDefault();
}
/* Step - 05: */
$("[name*='PollGroup']").each(function() {
$(this).attr('name', $(this).attr('ci-name'));
});
});
});
步驟1: 每當一個單選按鈕在使用中繼器,它的組名被改變,因爲asp.net改變它,使之唯一。因此,每個單選按鈕都會得到不同的組名(客戶端生成的標記中的名稱屬性)。因此,用戶可以同時選擇所有選項。這個問題通過使用jquery代碼解決,正如隨後的評論所解釋的。
第2步: 該代碼塊創建一個名爲ci-name的新custome屬性,並將name屬性的原始值複製到此新的自定義屬性中。輪詢中的每個單選按鈕都會重複該過程。這一步將幫助我們在後面的步驟。
步驟3: 該代碼塊將poll中所有單選按鈕的名稱屬性值設置爲第一個單選按鈕的名稱屬性值。此步驟可防止用戶一次選擇多個選項。
第4步: 此代碼在投票按鈕點擊事件的事件處理程序中,檢查用戶是否檢查了至少一個選項。如果他沒有,則顯示錯誤消息。
第5步: 此代碼在投票按鈕點擊事件的事件處理程序中,將所有單選按鈕的名稱屬性的值設置爲其原始值。這是通過從自定義屬性ci-name複製值來實現的。這允許asp.net服務器端代碼知道哪個按鈕被實際點擊。
參見:* [BUG:單選按鈕並不相互排斥當在Repeater服務器控件使用(http://support.microsoft.com/default.aspx?scid=kb; EN-US; Q316495)*。這只是簡單的瘋狂......這是自1.0框架以來的一個錯誤,它具有如此巨大的影響力。我需要繼承單選按鈕並覆蓋一些方法以使其工作(用於我當前的ASP.NET版本)。是什麼賦予了? – 2008-12-18 13:32:55