Как получить проверенное значение радиокнопки, выведенное на метку
Я получаю вывод 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