2009-03-25 3 views
0

Я думаю, что это должно быть самое неприятное, что я когда-либо делал в веб-формах. Но можно подумать, что это будет самая легкая из всех вещей в мире. То есть:2 Взаимоисключающий RadioButton «Списки»

Мне нужно 2 отдельных списка радиообъективов на моей странице .aspx. Один набор позволяет клиенту выбрать вариант. Другой набор тоже, но для другой цели. Но только один набор может иметь выбранный радиобуй.

Хорошо, я пробовал это, используя 2 элемента управления asp.net Radiobuttonlists на той же странице. Обнаружена неприятная ошибка с GroupName (asp.net назначает уникальный идентификатор элемента управления, который предотвращает работу группы из-за того, что теперь 2 радиообъектива не могут иметь одинаковое имя группы для всех своих радиообъектов, потому что каждый радиообъектив имеет свой уникальный уникальный идентификатор, поэтому ошибка назначает уникальный идентификатор в качестве атрибута имени при визуализации кнопок, поскольку наборы имен разные, они не являются взаимоисключающими). Во всяком случае, я создал этот настраиваемый RadioButtonListcontrol и исправил эту проблему с именем группы.

Но когда закончилось, когда я отправился на два экземпляра моего нового элемента управления радиообменами на моей странице .aspx, все было набуханием, пока я не заметил, что каждый раз, когда я проверял радиобъект1. Выбранный валид или радиообъект2.SelectedValue (сделал неважно, что я проверял) значение всегда вертело назад string.empty, и я не смог понять, почему (см. http://forums.asp.net/t/1401117.aspx).

ОК на третьей попытке сегодня вечером и в рассвете (без сна). Я попробовал вместо этого просто ломать попытку использовать 2 пользовательских радиообъектива в целом из-за этой непонятной проблемы и попытаться выплюнуть 2 набора радиообъективов с помощью 2 повторителей asp.net и стандартного входного HTML-тега внутри. Это работает. Хорошо, но 2 списка по-прежнему не являются взаимоисключающими. Я могу выбрать значение в первом наборе радиообъектов из ретранслятора1, а также для повторителя2. Я не могу для жизни меня получить «наборы», чтобы быть взаимоисключающими наборами радиообъектов.

+0

вы можете разместить соответствующую asp.net и код за кодом? –

+0

http://forums.asp.net/t/1401117.aspx – user72603

+0

Если бы у меня не было этой проблемы с пустой строкой каждый раз, я был бы готов пойти и мог бы просто проверить идентификатор, чтобы увидеть, есть ли у него selectedValue, который был бы намного чище, чем добавление индекса, как и все остальные, говорит о стандартном значении радиоуправления ввода – user72603

ответ

4

Поскольку у вас есть две группы переключателей, которые вы хотите использовать как одну группу переключателей, решение прост: сделайте одну группу переключателей.

Единственная проблема, с которой вы сталкиваетесь, состоит в том, что полученное вами значение имеет одно и то же имя из обоих списков, но это можно решить, добавив префикс к значениям, чтобы вы легко определяли, из какого списка этот параметр появляется.

+0

, так что да, мне может быть не нужно беспокоиться о вещи БД, если я могу связываться с двумя отдельными связями, если атрибут «имя» одинаковый. Мне просто нужно добавить, как вы сказали что-то, что я могу разделить в коде позади, и проверить, имеет ли значение, чтобы определить, какой список имеет выбор. – user72603

+0

Мне кажется, что это «хакерский» код для поддержки и проверки чеков в 2 списках. Мне это не нравится. – user72603

+0

@unknown: вам не нужно сохранять значения в одной таблице базы данных, чтобы использовать одно и то же имя для тегов html. Разделение префикса от значения - очень простая операция строки. – Guffa

2

Обновление: на основе новой информации, размещенной в виде ответа. Вариант я предложил на мой первоначальный ответ соответствует 3. Вы действительно должны рассмотреть следующие вопросы:

  • кнопки Html радио имеют только 1 встроенный механизм для обработки эксклюзивности, который является именем.
  • Вы явно запрашиваете решение js, поэтому, учитывая приведенное выше, вы должны управлять идентификаторами для его достижения. Если вы не блокировали эту опцию, я уверен, что кто-то придумает какую-нибудь симпатичную библиотеку jquery или js, которая уже поддерживает ее.
  • Вариант 3 явно менее инвазивный, поскольку вы не вынуждены влиять на фактические данные и на него не влияют будущие обновления.

Это не так много кода, только что-то дополнительно на индексах список, а некоторые простые вещи, как:

int? list1Value = null; 
int? list2Value = null; 
var value = Request.Form["somegroup"]; 
if (value.StartsWith("List1")) 
    list1Value = int.Parse(value.Substring(5)); 
else 
    list2Value = int.Parse(value.Substring(5));//Assuming List2 as prefix 

Оригинал:

Я видел ваш другой вопрос, и вы просто нужно использовать одно и то же имя группы. Убедитесь, что у вас разные значения для всех элементов, независимо от того, из какого списка они происходят. Способ достижения этого заключается в добавлении чего-то к значениям, например: <% # "List1-" + Eval ("ID")%> и модификации кода, который читает ваш Request.Form ["yourgroupname"].

+0

Снова то же имя группы требует, чтобы все мои данные были проведенных в одной таблице SQL. Это также означает теперь в моем коде, если я когда-нибудь захочу посмотреть, выбрал ли пользователь один из элементов 1-4 (при наборе из 4) или 5-9 (другой набор в одном и том же gorup), я должен делать все виды funky проверка значений вместо проверки ctrl – user72603

+0

@ неизвестно, как я сказал, вы бы привязывались как <% # "List1-" + Eval ("ID")%> и <% # "List2-" + Eval ("ID") %>, нет необходимости, чтобы фактические данные имели разные идентификаторы. При чтении его из Request.Form вы должны сначала проверить, было ли это в List1 или List2, а затем использовать идентификатор в соответствующем контексте/коде. – eglasius

0

Думаю, вам следует использовать RadioButtons вместо RadioButtonLists.

Here's an article, который представляет собой решение для устранения ошибки именования радиообъектов.

+0

Никто не понимает. Я сделал это. Но это означает, что все ваши ценности должны быть в одной группе и сделать ее «apppear» отделенной. Я сделал это. Это означает, что и ваши проверки кода, и данные должны быть взломаны, чтобы сделать эту работу. Ваши чеки теперь должны быть против кучи индексов вместо 2 ctrls – user72603

+0

да, я видел эту статью. Получение кнопок в одну группу не является проблемой.Я сказал, что он пытается управлять двумя списками, полностью разделенными, что невозможно с помощью радиолюбителей, потому что все они должны иметь одинаковое имя группы. – user72603

0

Хотя это сообщение уже датировано 1 год назад, я просто прочитал его, потому что сталкиваюсь с той же проблемой.

В настоящее время у меня есть 1 решение с помощью JQuery:

стороне клиента сценарий (вы должны также включать в себя Jquery)

 function SetRadio(rb) { 
     $('input:checked').attr('checked', false); 
     rb.checked = true; 
    } 

Для каждого радиокнопки (который является ListItem в RadioButtonList) я добавить следующее на сторона сервер:

li.Attributes.Add("onclick", "javascript:SetRadio(this)"); 

Для меня это работает как IE и Firefox, с 3 radiobuttonlists, без использования группы на. Вы можете проверить каждый радиобаллон для выбранного элемента/значения или расширить функцию SetRadio, чтобы сохранить выбранное значение в скрытом поле.

С уважением, M

Смежные вопросы