Группировка радиокнопок asp.net - PullRequest
29 голосов
/ 26 августа 2009

У меня сейчас проблема с переключателями и группировкой. У меня есть кнопка включения asp в контроллере повторителя. У меня есть атрибут имени группы, установленный на «Клиент». Когда страница загружается, переключатели не группируются. Вместо того, чтобы в качестве полей идентификатора указывалось имя группы, он устанавливает поля значений переключателей. Я знаю, что я пытался установить переключатели вне панели управления ретранслятором, и у меня возникла та же проблема. Что здесь происходит?

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>&nbsp;</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>&nbsp;</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's 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's 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's 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's 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's 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's Eatery</td>
    </tr>

</table>

Ответы [ 10 ]

48 голосов
/ 26 января 2010

Наконец-то я справился с этим, создав простой переключатель и установив значение с помощью серверного eval.

<input type="radio" name="radCustomer" value='<%#Eval("CustomerNumber") %>' />

Теперь, когда приложение выполняет обратную передачу, я проверяю значение Request.Form ["radCustomer"]. Это работает безупречно.

19 голосов
/ 26 августа 2009

К сожалению, это хорошо известная проблема с переключателями внутри повторителя . Один из ваших вариантов - создать собственный серверный элемент управления, производный от класса RadioButton, и переопределить способ его рендеринга.

РЕДАКТИРОВАТЬ : Вот пример того, как может выглядеть производный класс:

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>");
    }
}
10 голосов
/ 04 января 2012

Я исправил это в JavaScript

$(document).ready(function () {
        $("#divWithGridViewOrRepeater input:radio").attr("name", "yourGroupName");
    }); 
4 голосов
/ 03 июня 2012

У меня были такие же проблемы. Я использую 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>

C #

protected void rpt_OnItemCreated(object sender, RepeaterItemEventArgs e) {
    Literal lit = (Literal)e.Item.FindControl("lit");
    lit.Text = "<input type=\"radio\" name=\"myGroup\">";
}
2 голосов
/ 23 сентября 2015

Мне пришлось немного изменить ответ, опубликованный выше r3dsky.

Вот что у меня сработало:

$(document).ready(function () {
        $(".divWithGridViewOrRepeater input:radio").attr("name", "yourGroupName");
    }); 
0 голосов
/ 19 апреля 2017

Мое решение, похожее на другие:

<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();
});
0 голосов
/ 29 января 2016

Я сделал это:

$("input:radio").attr("name", $("input:radio").first().attr("name"));

Почему? потому что если вы замените свойство name на любую нужную вам строку, вы получите сообщение об ошибке «not found». Итак, вам нужно получить имя первой кнопки радио и переименовать все из них с этим именем. Работает как шарм;)

0 голосов
/ 05 апреля 2015

Это хорошо известная ошибка в ретрансляторе ASP.NET с использованием RadioButtons: вот лучшее на мой взгляд решение

0 голосов
/ 08 мая 2013

Я установил для моей радиопереключателя значение autopostback в значение true, а затем в обработчике событий установил все остальные переключатели в положение BE, не выбрав его.

Не идеально, но мне нужно много контроля над видимостью и включенными атрибутами радиокнопки, и казалось, что ASP.NET легче контролировать это, чем прибегать к скрипту на стороне клиента.

0 голосов
/ 26 августа 2009

Я бы начал с добавления значения в моей радиокнопке Значение = '<% # Eval ("CustomerNumber")%>'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...