Я унаследовал форму, которая включает структуру RadioButtonList, похожую на эту (имена изменены для защиты невиновных):
<asp:RadioButtonList id="ChicagoCubsInfield" RepeatDirection="Vertical" RepeatColumns="1" XPath="somePath">
<asp:ListItem Value="Tinker" Text="Tinker (Shortstop)" />
<asp:ListItem Value="Evers" Text="Evers (Second Base)" />
<asp:ListItem Value="Chance" Text="Chance (First Base)" />
</asp:RadioButtonList>
Конечно, при рендеринге в браузере это выглядит примерно так:
<table id="ctl00_Content_ChicagoCubsInfield XPath="somePath">
<tr><td><input id="ctl00_Content_ChicagoCubsInfield_0" type="radio" name="ctl00$Content$ChicagoCubsInfield" value="Tinker" /><label for="ctl00_Content_ChicagoCubsInfield_0">Tinker (Shortstop)</label></td></tr>
<tr><td><input id="ctl00_Content_ChicagoCubsInfield_1" type="radio" name="ctl00$Content$ChicagoCubsInfield" value="Evers" /><label for="ctl00_Content_ChicagoCubsInfield_1">Evers (Second Base)</label></td></tr>
<tr><td><input id="ctl00_Content_ChicagoCubsInfield_2" type="radio" name="ctl00$Content$ChicagoCubsInfield" value="Chance" /><label for="ctl00_Content_ChicagoCubsInfield_2">Chance (First Base)</label></td></tr>
</table>
Вот моя проблема: мне нужно, чтобы это выглядело так (обратите внимание на разницу в отображении ячеек таблицы):
<table id="ctl00_Content_ChicagoCubsInfield XPath="somePath">
<tr><td><input id="ctl00_Content_ChicagoCubsInfield_0" type="radio" name="ctl00$Content$ChicagoCubsInfield" value="Tinker" /><label for="ctl00_Content_ChicagoCubsInfield_0">Tinker</label></td><td>(Shortstop)</td></tr>
<tr><td><input id="ctl00_Content_ChicagoCubsInfield_1" type="radio" name="ctl00$Content$ChicagoCubsInfield" value="Evers" /><label for="ctl00_Content_ChicagoCubsInfield_1">Evers</label></td><td>(Second Base)</td></tr>
<tr><td><input id="ctl00_Content_ChicagoCubsInfield_2" type="radio" name="ctl00$Content$ChicagoCubsInfield" value="Chance" /><label for="ctl00_Content_ChicagoCubsInfield_2">Chance</label></td><td>(First Base)</td></tr>
</table>
Другими словами, мне нужно, чтобы имя и (позиция) были разделены на отдельные столбцы, но их все еще нужно выровнять по строке. Возможно ли это в RadioButtonList?
Я попытался превратить их в отдельные объекты RadioButton, но после этого я начал получать следующее:
Элемент управления 'ctl00$Content$ChicagoCubsInfield_0', на который ссылается свойство ControlToValidate '', не может быть проверен.
Я пытался возиться с проверкой (включая установку свойства CausesValidation на «False»), но все безрезультатно.
Примечание. Меня не столько беспокоит ошибка проверки, сколько рендеринг таблицы; это более важно (если только исправление ошибки проверки не поможет решить проблему рендеринга).
Что было бы лучшим способом справиться с этим?
Заранее спасибо . . .
Изменить: я смог воссоздать то, что хотел, используя прямые теги ‹input> на стороне клиента, но это не идеально. Я бы предпочел использовать ‹asp:RadioButton> на стороне сервера.
Я кое-что покопался, и оказалось, что причина, по которой мои теги RadioButton не проходят проверку, связана с префиксами ct100, которые присоединены к началу тегов ID/Name. Когда страница работает (с RadioButtonList), идентификаторы для каждого ListItem, кажется, имеют префикс «ct100_Content_», но имя имеет префикс «ct100$Content$».
Ошибка, которую я получаю (при попытке использовать отдельные RadioButtons):
Элемент управления 'ctl00$Content$ChicagoCubsInfield_0', на который ссылается свойство ControlToValidate '', не может быть проверен.
Из того, что я вижу, я думаю, что элемент управления ищет "ctl00_Content_ChicagoCubsInfield_0" (обратите внимание на "_" вместо "$").
Как заставить идентификатор использовать символы подчеркивания вместо знаков доллара? Мне нужно сохранить его локальным для этих тегов, так как я считаю, что настройки используются где-то еще (опять же, это не моя форма), и я не хочу ничего ломать.
Правка: достаточно об этой теории. Я наткнулся на атрибут «ClientIDMode», установил для него значение «Статический» и явно установил свои идентификаторы. Нет игральных костей. Копание продолжается. . .