когда я пытаюсь проверить, установлен ли переключатель, код не выполняется - PullRequest
0 голосов
/ 04 января 2012

я пытаюсь 2 сделать тест в asp.net. выбор mcq отображается с помощью переключателей. в коде позади, когда я пытаюсь 2 проверить, если переключатель радио проверен, d код под этим, если оператор не выполняется. код aspx:

<ItemTemplate>
            <asp:Literal ID="Literal1" runat="server" Text='<%#Eval("ques") %>'></asp:Literal><br />
            <asp:RadioButton GroupName="a" ID="RadioButton1" Text='<%#Eval("ch1") %>' runat="server" /><br />
            <asp:RadioButton GroupName="a" ID="RadioButton2" Text='<%#Eval("ch2") %>' runat="server" /><br />
            <asp:RadioButton GroupName="a" ID="RadioButton3" Text='<%#Eval("ch3") %>' runat="server" /><br />
            <asp:RadioButton GroupName="a" ID="RadioButton4" Text='<%#Eval("ch4") %>' runat="server" /><br />

            <asp:Label ID="Label1" runat="server" Text='<%#Eval("ans") %>' Visible="false"></asp:Label><br />
            <asp:Label ID="Label3" runat="server" Text="Label"></asp:Label><br />
        </ItemTemplate>

код:

protected void Button1_Click(object sender, EventArgs e)
    {
        int count = 0;

        foreach(RepeaterItem Items in Repeater1.Items)
        {

            RadioButton r1 = (RadioButton)Items.FindControl("RadioButton1");
            RadioButton r2 = (RadioButton)Items.FindControl("RadioButton2");
            RadioButton r3 = (RadioButton)Items.FindControl("RadioButton3");
            RadioButton r4 = (RadioButton)Items.FindControl("RadioButton4");
            Label l3 = (Label)Items.FindControl("Label3");

            Label l=(Label)Items.FindControl("Label1");
            l3.Text = "hello?";
            if (r1.Checked)
            {
               if(r1.Text==l.Text)
                     count++;
            }
            else
            {
                if (r2.Checked)
                {
                    if(r2.Text==l.Text)
                       count++;
                }
            }
              // and so on for all 4 options
        }
        Label2.Visible = true;
        Label2.Text = "your score is " + count;       //always zero!

    }

Ответы [ 2 ]

1 голос
/ 04 января 2012

Если вы проходите через отладчик, и ваша строка

if(r1.Text==l.Text) 
  count++; 

не выполняется, то я думаю, что строка if (r1.Checked) оценивается как ложная.

На вашем Page_Load() методе для этой страницы есть какие-либо привязки данных или манипуляции с этими переключателями?Если так, если вы не заключите их в условное выражение if(!Page.IsPostBack){ ... }, тогда оно уничтожит все, что пользователь сделал с переключателем, поэтому r1.Checked будет false.

Я надеюсь, что это может помочь :)Удачи.

0 голосов
/ 04 января 2012

Вам нужно будет сделать следующее:

  1. Установите для AutoPostBack на переключателе переключателя значение true.
  2. Установите OnItemCommand на контроллере повторителя на"Button1_Click"
  3. Измените сигнатуру метода Button1_Click на protected void Button1_Click(object sender, RepeaterCommandEventArgs e)

Это, по крайней мере, вызовет метод в вашем коде позади.

...