Группировка радиостанций asp.net
В настоящее время у меня проблема с переключателями и группировкой. У меня есть переключатель радиоуправления в репитере. У меня есть атрибут имени группы, установленный на "Клиент". Когда страница загружается, переключатели не группируются. Вместо полей id, заданных для имени группы, он устанавливает поля значений для переключателей. Я знаю, что я пробовал устанавливать радиокнопки вне контроля ретранслятора и имел ту же проблему. Что здесь происходит?
ASPX
<asp:Repeater ID="repCustomers" runat="server">
<HeaderTemplate>
<table class="tableDefault" cellpadding="0" cellspacing="0" border="0" style="width: 383px; border: 0px !important">
<tr>
<th> </th>
<th>Cust. No.</th>
<th>Cust. Name</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:RadioButton ID="radCustomer" GroupName="Customer" runat="server" ValidationGroup="Customer" ToolTip='<%#Eval("CustomerNumber") %>' />
</td>
<td><%#Eval("CustomerNumber")%></td>
<td><%#Eval("Name") %></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
вывод html
<table class="tableDefault" cellpadding="0" cellspacing="0" border="0" style="width: 383px; border: 0px !important">
<tr>
<th> </th>
<th>Cust. No.</th>
<th>Cust. Name</th>
</tr>
<tr>
<td>
<span title="111111"><input id="ctl00_PrimaryContent_repCustomers_ctl01_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl01$Customer" value="radCustomer" /></span>
</td>
<td>111111</td>
<td>Jeremy Test</td>
</tr>
<tr>
<td>
<span title="222222"><input id="ctl00_PrimaryContent_repCustomers_ctl02_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl02$Customer" value="radCustomer" /></span>
</td>
<td>222222</td>
<td>My Test</td>
</tr>
<tr>
<td>
<span title="333333"><input id="ctl00_PrimaryContent_repCustomers_ctl03_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl03$Customer" value="radCustomer" /></span>
</td>
<td>333333</td>
<td>Jim Bob BBQ</td>
</tr>
<tr>
<td>
<span title="444444"><input id="ctl00_PrimaryContent_repCustomers_ctl04_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl04$Customer" value="radCustomer" /></span>
</td>
<td>444444</td>
<td>New Hope Hamburgers</td>
</tr>
<tr>
<td>
<span title="555555"><input id="ctl00_PrimaryContent_repCustomers_ctl05_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl05$Customer" value="radCustomer" /></span>
</td>
<td>555555</td>
<td>Pied Piper Pizza</td>
</tr>
<tr>
<td>
<span title="666666"><input id="ctl00_PrimaryContent_repCustomers_ctl06_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl06$Customer" value="radCustomer" /></span>
</td>
<td>666666</td>
<td>Sandy Subs</td>
</tr>
<tr>
<td>
<span title="777777"><input id="ctl00_PrimaryContent_repCustomers_ctl07_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl07$Customer" value="radCustomer" /></span>
</td>
<td>777777</td>
<td>Leonard Lambchops</td>
</tr>
<tr>
<td>
<span title="888888"><input id="ctl00_PrimaryContent_repCustomers_ctl08_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl08$Customer" value="radCustomer" /></span>
</td>
<td>888888</td>
<td>Dave Diamond Deli</td>
</tr>
<tr>
<td>
<span title="999999"><input id="ctl00_PrimaryContent_repCustomers_ctl09_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl09$Customer" value="radCustomer" /></span>
</td>
<td>999999</td>
<td>Ernie Eatery</td>
</tr>
</table>
Ответы
Ответ 1
Я, наконец, обошел это, создав простой радиокнопку и установив значение с помощью eval на стороне сервера.
<input type="radio" name="radCustomer" value='<%#Eval("CustomerNumber") %>' />
Теперь, когда приложение выполняет обратную передачу, я проверяю значение Request.Form [ "radCustomer" ]. Это работает безупречно.
Ответ 2
К сожалению, это хорошая известная проблема с переключателями в репитере. Один из ваших единственных вариантов - создать настраиваемый серверный элемент управления, полученный из класса RadioButton, и переопределить способ его рендеринга.
EDIT: Здесь пример того, как может выглядеть производный класс:
public class MyRadioButton : RadioButton
{
protected override void Render(HtmlTextWriter writer)
{
writer.Write("<input id=\"" + base.ClientID + "\" ");
writer.Write("type=\"radio\" ");
writer.Write("name=\"" + base.ID + "\" ");
writer.Write("value=\"" + base.ID + "\" />");
writer.Write("<label for=\"" + base.ClientID + "\">");
writer.Write(base.Text);
writer.Write("</label>");
}
}
Ответ 3
Я исправил его в javascript
$(document).ready(function () {
$("#divWithGridViewOrRepeater input:radio").attr("name", "yourGroupName");
});
Ответ 4
У меня были те же проблемы. Я использую Literal в качестве заполнителя для рендеринга кнопки onItemCreated.
ASP.Net
<asp:Repeater ID="rpt" runat="server" OnItemCreated="rpt_OnItemCreated">
<ItemTemplate>
<asp:Literal ID="lit" runat="server"></asp:Literal>
</ItemTemplate>
</asp:Repeater>
С#
protected void rpt_OnItemCreated(object sender, RepeaterItemEventArgs e) {
Literal lit = (Literal)e.Item.FindControl("lit");
lit.Text = "<input type=\"radio\" name=\"myGroup\">";
}
Ответ 5
Мне пришлось немного изменить ответ, указанный выше r3dsky.
Вот что сработало для меня:
$(document).ready(function () {
$(".divWithGridViewOrRepeater input:radio").attr("name", "yourGroupName");
});
Ответ 6
Я бы начал с добавления значения на моем радиообъекте Value = '<% # Eval ( "CustomerNumber" )% > '.
Ответ 7
Я сделал свой радиобуй, у которого автоповтор установлен на true, а затем в обработчике событий все остальные радиокнопки будут выбраны без выбора.
Не идеально, но мне нужно много контролировать видимость и активированные атрибуты радиообмена, и казалось, что проще управлять ASP.NET, вместо того чтобы прибегать к стороне клиента script.
Ответ 8
Это хорошо известная ошибка с ретранслятором ASP.NET с помощью RadioButtons:
вот лучшее решение на мой взгляд
Ответ 9
Я сделал это:
$("input:radio").attr("name", $("input:radio").first().attr("name"));
Почему? потому что, если вы замените свойство name для любой нужной строки, вы получите "не найденную ошибку". Итак, вам нужно получить имя первого радиобуя и переименовать все из них с этим именем. Он работает как шарм;)
Ответ 10
Мое решение, похожее на другие:
<input id="ctlRadio" runat="server" type="radio" data-fixgroupbug="1" >
// Fixes this ASP.NET bug: if radio input is inside repeater you can't set its name.
// Every input gets set different name by ASP.NET.
// They don't behave as a group. You can select multiple radios.
function fixRadiogroupBug()
{
$('[type="radio"][data-fixgroupbug]').click(function () {
$(this).siblings('[type="radio"]').prop('checked', false);
});
}
$(document).ready(function () {
fixRadiogroupBug();
});