Я знаю, что этот вопрос немного устарел, но я думаю, что он может кому-нибудь помочь, поэтому публикую свое решение этой проблемы.
Эта проблема состоит из 2 частей:
- Для предотвращения выбора нескольких переключателей одновременно.
- Чтобы узнать, какая радио-кнопка была нажата в коде на стороне сервера.
У меня была похожая проблема с переключателем в Repeater. Я нашел частичное решение здесь:
Простое исправление для элементов управления радиокнопками в ретрансляторе ASP.NET с использованием jQuery
Пожалуйста, прочитайте приведенную выше статью, чтобы получить представление о проблеме. Я сослался на эту статью, и это была хорошая помощь. Как уже упоминалось выше, эта проблема состоит из двух частей, во-первых, для предотвращения выбора более одной переключателя одновременно. Во-вторых, узнать, какая радио-кнопка была нажата в коде на стороне сервера. Решение, опубликованное в статье выше, сработало для меня только для первой части. Однако написанный там код, а также размещенные там обновления решения не сработали. Поэтому мне пришлось немного его изменить, чтобы он заработал. Вот мое решение.
Я хотел создать опрос с помощью кнопки Голосовать. Имя моего переключателя (ID) - PollGroupValue, а для Groupname установлено значение PollGroup в повторителе. Помните, атрибут Groupname в ASP.net отображается как атрибут name в сгенерированном html. Мой код выглядит следующим образом:
<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 меняет его, чтобы сделать его уникальным. Поэтому каждый переключатель получает различное имя группы (атрибут name в сгенерированной разметке на стороне клиента). Благодаря этому пользователь может выбрать все параметры одновременно. Эта проблема решается с помощью кода jquery, как объяснено в последующих комментариях.
Шаг 2:
Этот блок кода создает новый атрибут custome с именем ci-name и копирует исходное значение атрибута name в этот новый настраиваемый атрибут. Этот процесс повторяется для каждого переключателя в опросе. Этот шаг поможет нам в следующем шаге.
Шаг 3:
Этот блок кода устанавливает значение атрибутов имени всех переключателей в опросе равным значению атрибута имени первого переключателя. Этот шаг не позволяет пользователю выбирать более одной опции одновременно.
Шаг 4:
Этот код в обработчике события нажатия кнопки голосования проверяет, выбрал ли пользователь хотя бы один параметр. Если нет, отображается сообщение об ошибке.
Шаг 5:
Этот код внутри обработчика события нажатия кнопки голосования устанавливает значение атрибута name всех переключателей в исходное значение. Это достигается путем копирования значения из пользовательского атрибута ci-name. Это позволяет коду на стороне сервера asp.net узнать, какая кнопка была нажата.