Как добавить атрибут к элементу RadioButtonList внутри тега input asp.net

У меня есть asp.net RadioButtonList, привязанный к данным. Отображаемые элементы списка, по-видимому, отображаются как входные данные типа radio, метки и диапазона.

Когда я перебираю каждый элемент ListItem и добавляю атрибут onclick, он по желанию добавляет атрибут onclick во входной тег. Но когда я добавляю настраиваемый атрибут, он добавляет его к окружающему диапазону. Как я могу заставить его добавить его во входной тег БЕЗ изменения рендеринга RadioButtonList с помощью настраиваемого ControlAdapter? Я использую веб-сайт (не проект) и .net 2.0. Заранее спасибо!

ASP.NET

For Each li As ListItem In Me.rbl.Items
   li.Attributes.Add("onclick", "myFunction();")
   li.Attributes.Add("myAttribute", "1")
Next

HTML

<table id="ctl00_ContentPlaceHolder1_rbl" border="0">
    <tr>
        <td><span myAttribute="1"><input id="ctl00_ContentPlaceHolder1_rbl_0" type="radio"
          name="ctl00$ContentPlaceHolder1$rbl" value="Choice1" onclick="myFunction();" />
         <label for="ctl00_ContentPlaceHolder1_rbl_0">Choice1</label></span></td>
    </tr>
</table>

person user1422348    schedule 31.07.2014    source источник
comment
Взгляните на это: stackoverflow.com/questions/3777740/   -  person BA TabNabber    schedule 31.07.2014
comment
Спасибо. Я видел подобное обсуждение, но, к сожалению, элементы RadioButtonList не имеют свойства InputAttributes, только свойство Attributes.   -  person user1422348    schedule 31.07.2014


Ответы (1)


Вы можете попробовать что-то вроде этого:

Dim i As Integer = 0

For Each li As ListItem In Me.rbl.Items
   li.Attributes.Add("onclick", "myFunction();")
   ClientScript.RegisterExpandoAttribute(rbl.ClientID & "_" & i.ToString, "myAttribute", "1")
   i += 1
Next

Атрибуты не будут видны в HTML, потому что добавленная выше строка сгенерирует клиентский скрипт, что-то вроде

var ctl00_ContentPlaceHolder1_rbl_0 = document.all ? document.all["ctl00_ContentPlaceHolder1_rbl_0"] : document.getElementById("ctl00_ContentPlaceHolder1_rbl_0");
ctl00_ContentPlaceHolder1_rbl_0.myAttribute = "1";
var ctl00_ContentPlaceHolder1_rbl_1 = document.all ? document.all["ctl00_ContentPlaceHolder1_rbl_1"] : document.getElementById("ctl00_ContentPlaceHolder1_rbl_1");
ctl00_ContentPlaceHolder1_rbl_1.myAttribute = "1";

Но атрибут будет назначен и доступен в клиентском коде.

person Yuriy Galanter    schedule 31.07.2014
comment
Это очень крутой вариант, и, похоже, он работает. В итоге я выбрал другой вариант, в котором я проверяю родительский узел на предмет этого атрибута в моей функции javascript. Спасибо! - person user1422348; 07.08.2014