Commish13 Ответов: 1

Как проверить несколько переключателей в a ASP.NET ретранслятор в C#


У меня есть несколько переключателей, и я использую имя группы, чтобы выбрать по крайней мере 1 из 2 вариантов. Кажется, я не могу получить имя группы, чтобы проверить их с помощью кнопки отправки.

Спасибо за любую помощь

Что я уже пробовал:

<asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="* Select an option" ForeColor="#ff0000" OnServerValidate="option1_Validation" Display="Dynamic" /> 

<myRepeater>

<asp:RadioButton ID="rdOption1" Text="Option_1" GroupName="gnOption1" runat="server" />

<asp:RadioButton ID="rdOption2" Text="Option_2" GroupName="gnOption1" runat="server" />

</myRepeater>

 protected void option1_Validation(object source, ServerValidateEventArgs args)
    {
        bool itemSelected = false;
        foreach (RepeaterItem ri in myRepeater.Items)
        {
            RadioButton rb= (RadioButton)ri.FindControl("gnOption1");
            {               
              if (rb.GroupName == "gnOption1" && rb.Checked == true)
                {
                    itemSelected = true;

                }
                args.IsValid = itemSelected;
            }
        }
    }

Richard Deeming

ri.FindControl("gnOption1")


Нет, это твой контроль. ID это тоже не "gnOption1".

1 Ответов

Рейтинг:
2

Richard Deeming

Цитата:
RadioButton rb= (RadioButton)ri.FindControl("Game_1");

То FindControl метод[^] ожидает, что параметр, представляющий ID о контроле, который вы хотите найти.

У вас нет элемента управления с идентификатором Game_1 внутри вашего ретранслятора, так что FindControl будет возвращать null, и вы получите a NullReferenceException.

Вам нужно ввести правильный идентификатор элемента управления, который вы пытаетесь найти:
bool itemSelected = false;
foreach (RepeaterItem ri in myRepeater.Items)
{
    RadioButton rb = (RadioButton)ri.FindControl("rdOption1");
    if (rb.Checked) 
    {
        itemSelected = true;
        break;
    }
}

args.IsValid = itemSelected;

NB: Это позволит проверить, выбран ли "Option_1" в каком-либо элементе. Если это не то, что вы пытаетесь проверить, то вам нужно будет объяснить свое требование.

РЕДАКТИРОВАТЬ: Если вы хотите проверить, что в каждом элементе выбрана одна из радиокнопок:
args.IsValid = true;

foreach (RepeaterItem ri in myRepeater.Items)
{
    RadioButton rb = (RadioButton)ri.FindControl("rdOption1");
    if (rb.Checked) continue;
    
    rb = (RadioButton)ri.FindControl("rdOption2");
    if (rb.Checked) continue;
    
    // Neither option is selected:
    args.IsValid = false;
    break;
}


Commish13

Извините, но ("Game_1") должно было быть ("gnOption1"). Я пытаюсь проверить, что 1 из 2 переключателей должен быть выбран.

Richard Deeming

Как я уже сказал, FindControl параметр должен быть следующим ИДЕНТИФИКАТОР из-под твоего контроля.

Вы не можете пройти мимо GroupName от вашего контроля и ожидать, что он найдет что-нибудь.

Идентификаторы ваших радиокнопок следующие rdOption1 и rdOption2 Это те струны, к которым вы можете перейти FindControl.

Commish13

Хорошо. Я понимаю, о чем ты говоришь. Это позволит проверить, выбран ли переключатель rbOption1. Но я пытаюсь проверить, выбран ли 1 из 2 переключателей, чем это было бы допустимо. Вот почему я пытался использовать имя группы. Есть ли способ проверить эти 2 переключателя одновременно, чтобы убедиться, что выбран 1 из 2 вариантов?

Commish13

Спасибо, ваш второй код отлично работает!

Vincent Maverick Durano

5ed!