Как получить проверенное значение радиокнопки, выведенное на метку

Я получаю вывод 0 и я не знаю, что я делаю неправильно. Я использовал метод findcontrol, чтобы найти идентификаторы в Gridview и объявить их в качестве радиокнопок, затем я пытаюсь использовать оператор if, чтобы назначить для отмеченного переключателя значение, а затем вывести это значение на метку.

VB код

 Protected Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click

    Dim numOutput As Integer

    For Each row As GridViewRow In GridView1.Rows
        Dim qID As Label = row.FindControl("QuestionID")
        Dim rd1 As RadioButton = TryCast(row.FindControl("answer1"), RadioButton)
        Dim rd2 As RadioButton = TryCast(row.FindControl("answer2"), RadioButton)
        Dim rd3 As RadioButton = TryCast(row.FindControl("answer3"), RadioButton)
        Dim rd4 As RadioButton = TryCast(row.FindControl("answer4"), RadioButton)

        If rd1.Checked = True Then
            numOutput = 1
        ElseIf rd2.Checked = True Then
            numOutput = 2
        ElseIf rd3.Checked = True Then
            numOutput = 3
        ElseIf rd4.Checked = True Then
            numOutput = 4
        End If

    Next
    lblOutput.Text = numOutput
End Sub

Исходный код

 <asp:GridView ShowHeader="false" AutoGenerateColumns="false" ID="GridView1" runat="server" GridLines="None">
        <Columns>
            <asp:TemplateField>

                <ItemTemplate>
                    <asp:Label runat="server" ID="QuestionID" Text='<%# Eval("QuestionID")%>' />
                    <asp:Label runat="server" ID="Question" Text='<%# Eval("Question")%>' /><br />
                    <asp:RadioButton GroupName="a" Text='<%# Eval("answer1")%>' runat="server" ID="answer1" /><br />
                    <asp:RadioButton GroupName="a" Text='<%# Eval("answer2")%>' runat="server" ID="answer2" /><br />
                    <asp:RadioButton GroupName="a" Text='<%# Eval("answer3")%>' runat="server" ID="answer3" /><br />                  
                    <asp:RadioButton GroupName="a" Text='<%# Eval("answer4")%>' runat="server" ID="answer4" /><hr />
                </ItemTemplate>
            </asp:TemplateField>

        </Columns>

    </asp:GridView>

<asp:Button ID="btnSubmit" runat="server" Text="Submit" />
   <asp:Label ID="lblOutput" runat="server" Text="" />

1 ответ

Ваш баг

Я не знаю, что не так с вашим кодом, потому что я не могу отладить ваш код, чтобы посмотреть, что происходит с вашим кодом VB. Если вы не знаете, как можно отладить свой код, посмотрите это видео на YouTube об отладке.


Мое предложение

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

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

Не забудьте добавить один к счетчику, или он останется на том же значении.

Вот код VB:

Dim counter As Integer = 0

For Each contr As Control In pnlAnswers.Controls 'loop over each control on the panel

    If TypeOf contr Is RadioButton Then 'Check if contr is a RadioButton 

        RadioButton rdb = CType(contr, RadioButton) 'if yes cast it to a RadioButton

        If rdb.Checked Then 'If checked

            lblOutput.Text = counter.ToString() 'Place the tag value on the output label
            Return

        End If

        counter += 1
    End If
Next

Поместите также ваши ярлыки за пределы панели. Обратите внимание, что это не влияет на код позади, если метки находятся внутри панели. Цикл пропустит их, потому что метка не является типом переключателя. Но лучше, если надписи будут добавлены в ваше приложение.

Вот код ASP:

<asp:Label runat="server" ID="QuestionID" Text='<%# Eval("QuestionID")%>' />
<asp:Label runat="server" ID="Question" Text='<%# Eval("Question")%>' /><br />

<asp:panel ID="pnlAnswers" runat="server">
    <asp:RadioButton GroupName="a" Text='<%# Eval("answer1")%>' runat="server" ID="answer1" /><br />
    <asp:RadioButton GroupName="a" Text='<%# Eval("answer2")%>' runat="server" ID="answer2" /><br />
    <asp:RadioButton GroupName="a" Text='<%# Eval("answer3")%>' runat="server" ID="answer3" /><br />
    <asp:RadioButton GroupName="a" Text='<%# Eval("answer4")%>' runat="server" ID="answer4" />
</asp:panel>

PS: теги, которые я добавил в предыдущем обновлении, теперь не нужны.


Код очистить

Я также удалил эту строку кода:

Dim qID As Label = row.FindControl("QuestionID")

Я не могу найти ни одной строки, где вы используете эту строку, так что найти ваш ярлык излишне QuestionID,


Заметки

Я давно использовал веб-формы VB.NET и ASP.NET, поэтому, пожалуйста, прокомментируйте меня, если код не работает.

#SOreadytohelp

Другие вопросы по тегам