ASP.NET radobuttonlist onclientclick

Я заметил, что для элемента radioobuttonlist в наборе элементов управления ASP.NET нет свойства OnClientClick(). Является ли это целенаправленным уходом на стороне Microsoft? Во всяком случае, я попытался добавить OnClick в список переключателей так:

For Each li As ListItem In rblSearch.Items
    li.Attributes.Add("OnClick", "javascript:alert('jon');")
Next

Но, увы, это не сработает. Я даже проверил источник в firebug, и нет javascript, показанного в radioobuttonlist. Кто-нибудь знает, как заставить эту очень простую работу работать? Я использую управляющие админы ASP.NET, поэтому не знаю, имеет ли это к этому какое-то отношение.

(Я хочу, чтобы asp.net/javascript просто выработал поле!!!)

Ответ 1

Я обнаружил, что могу просто добавить атрибут onclick в RadioButtonList, и он будет запускать клиентскую сторону javascript, как ожидалось.

<asp:RadioButtonList ID="RadioButtonList1" runat="server" onclick="alert('RadioButtonListSelectChange');">
    <asp:ListItem Text="One" Value="1"/>
    <asp:ListItem Text="Two" Value="2"/>
</asp:RadioButtonList>

Затем вы можете написать клиент script, который мог бы определить текущий выбранный элемент списка.

Ответ 2

Функция атрибута onclick очень хороша в объекте ListItem. Попробуйте следующим образом:

li.Attributes.Add("onclick", "javascript:showDiv()")

Эта функция для меня.

Ответ 3

Не совсем ответ, но несколько странных замечаний по другим предложениям. Я предваряю это, сказав, что это приложение RadioButtonList в приложении ASP.Net 4.0 с RepeatDirection = Vertical

1) Добавление onclick = 'myJsFunction (this);' атрибуты ListItems работали отлично для меня, за исключением того, что после того, как другой элемент на странице вызывает сообщение назад (например, действие с кнопкой), атрибуты в ListItems не будут отображаться в результате постбэк. Они начинают отображаться, но не при нажатии кнопки. Наведите указатель мыши.

2) По-видимому, наш устаревший код полагался на какое-то мутное, менее каноническое поведение в RadioButtonList/ListItem, которое становится очень грязным при обратной передаче. Если вы поместите атрибут id в ListItem, ASP.Net 2.0+ добавит тег span вокруг переключателя и поместит ваше значение id. Если вы добавите в него атрибут onclick, который будет отображаться на переключателе - по крайней мере, когда Page.IsPostBack == false.

<asp:RadioButtonList  ID="proceedChoice" runat="server" RepeatDirection="Vertical">
    <asp:ListItem id="Close_Case_Y" Value="Y" onclick="SelectResolveType(this);" Text="I want to close this case."  runat="server" />
    <asp:ListItem id="Close_Case_N" Value="N" onclick="SelectResolveType(this);" Text="I want to cancel this and start over."  runat="server" />
</asp:RadioButtonList>

отображается как

<table id="...proceedChoice" border="0">
<tr>
    <td><span id="Close_Case_Y"><input id="..._proceedChoice_0" type="radio" value="Y" onclick="SelectResolveType(this);" /><label for="..._proceedChoice_0">I want to close this case.</label></span></td>
</tr><tr>
    <td><span id="Close_Case_N"><input id="..._proceedChoice_1" type="radio" value="N" onclick="SelectResolveType(this);" /><label for="..._proceedChoice_1">I want to cancel this case and start over.</label></span></td>
</tr>
</table>

После обратной передачи с какой-либо другой кнопки, хотя тот же шаблон отображается как

<table id="...proceedChoice" border="0">
<tr>
    <td><input id="..._proceedChoice_0" type="radio" value="Y" /><label for="..._proceedChoice_0">I want to close this case.</label></td>
</tr><tr>
    <td><input id="..._proceedChoice_1" type="radio" value="N" /><label for="..._proceedChoice_1">I want to cancel this case and start over.</label></td>
</tr>
</table>

Но здесь, где это становится действительно странно: если вы ссылаетесь на другие атрибуты ListItem, отличные от id и onclick, атрибуты только те сохраняются. Например, если я добавлю скрытый = "скрытый" в один из ListItems, он будет отображаться таким образом после обратной передачи

<table id="...proceedChoice" border="0">
<tr>
    <td><span hidden="hidden"><input id="..._proceedChoice_0" type="radio" value="Y" /><label for="..._proceedChoice_0">I want to close this case.</label></span></td>
</tr><tr>
    <td><input id="..._proceedChoice_1" type="radio" value="N" /><label for="..._proceedChoice_1">I want to cancel this case and start over.</label></td>
</tr>
</table>

Ответ 4

Поскольку это элемент управления списком, нет события OnClientClick. Или используйте postback (SelectedIndexChange) или напишите javascript, чтобы захватить щелчок для каждого переключателя.

Ответ 5

            foreach (PlaceType t in query.ToList())
        {

            ListItem li = new ListItem(@"<img src=""" + t.ImageRelativePath + @"""/><br/>" + t.PlaceTypeText, t.PlaceTypeID.ToString());
            li.Attributes.Add("onclick", "javascript:placeTypeChange('" + t.ImageRelativePath + "')");
            rblPlaceTypes.Items.Add(li);
        }

Итак, я там

a) Итерация по результатам запроса EF. b) Создание нового элемента списка и добавление его в список моих переключателей (rblPlaceTypes). c) Конструктор помещает изображение так, чтобы отображалось. d) файл li.Attributs.Add помещает узел javascript в.