Радиокнопки не группируются должным образом в повторителе ASP.NET 2.0 - PullRequest
1 голос
/ 27 августа 2011

У меня есть веб-приложение в ASP.NET 2.0, в котором мне нужно иметь сильно настроенную сетку. Один из столбцов в сетке содержит переключатель для каждой строки.

Я реализую его как Repeater элемент управления с div в каждом ItemTemplate. Проблема в том, что переключатели (теги ASP:RadioButton) не сгруппированы так, как должны; Выбор одного из них не отменяет выбор. Я уже установил для них свойство GroupName, но я не вижу, чтобы он отображался в HTML где-либо через Firebug. Поиск в Google сообщает мне , что атрибут "name" в <input type='radio> определяет членство в группе, но ASP уже использует его в качестве своего рода уникального идентификатора. Каждая кнопка-переключатель выглядит примерно так при рендеринге в HTML:

<input id="{asp_garbage_naming}_ctl01_rbFoo" type="radio"
   name="ctl03$controlName$otherControlName$ctl01$name"
   value="rbHost" checked="checked" />

Есть ли способ заставить эту работу? Или я собираюсь самостоятельно указать поведение переключателей (javascript и т. Д.)?

Ответы [ 3 ]

1 голос
/ 06 октября 2011

Сотрудник столкнулся с этой проблемой и внедрил решение jQuery. Вот выдержка из этого:

Это дало мне функциональность переключателя, которую я хотел, но это помешало мне получить выбранный переключатель при обратной передаче. Поэтому я решил просто реализовать функциональность переключателя вручную.

var radios = $("input:radio");
radios.click(function() {
     radios.removeAttr('checked');
     $(this).attr('checked', 'checked');
     return true;
});

, что дало мне правильную функциональность, и я все еще мог получить выбранный переключатель и текстовое поле при обратной передаче. Возможно, это не самое элегантное решение, но я не мог найти другого способа сделать это.

Полный пост: Радиокнопка в пределах проблемы повторителя

1 голос
/ 22 апреля 2012

На стороне сервера сделайте следующее:

protected void rptRepeaterName_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    RadioButton rdbRadioButtonName = e.Item.FindControl("rdbRadioButtonName") as RadioButton;
    Repeater rptRepeaterName = sender as Repeater;
    rdbRadioButtonName.Attributes.Add("onclick", string.Format("return radioSelected('{0}', '{1}')", rptRepeaterName.ClientID, rdbRadioButtonName.ClientID));
}

В JavaScript сделать следующее:

function radioSelected(rptpricelevel, rdbPriceLevel)
{        
    for (cnt = 0; cnt<100; cnt++)
    {            
        var rdbId = rptpricelevel;
        if(cnt < 10)
        {
            rdbId = + '_ctl0' + cnt + '_rdbRadioButtonName';
        }
        else
        {
            rdbId = + '_ctl' + cnt + '_rdbRadioButtonName';
        }
        var rdb = document.getElementById(rdbId);
        if(rdb != null)
        {
            if(rdbId != rdbPriceLevel)
            {
                rdb.checked = false;
            }
        }
     }         
}
0 голосов
/ 27 августа 2011

Вопрос?Вам нужны эти переключатели для управления сервером (т. Е. Нужен ли вам тег runat = server)?Если нет, вы можете просто установить обычные html-переключатели в столбце и привязать к нему любые свойства, используя синтаксис <%#Eval("Property")%>.Просто мысль

...