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 в.