我正在ASP.Net中创建一个表单以复制纸质表单(我在设计中没有发言权,我的任务是仅仅以数字方式重新创建它)。这个表格有许多问题,如“回答是或否。如果是,请说明多少”。我目前通过列出问题处理它,然后在一组中有两个单选按钮,一个说“是”,一个说“不”。为了使它更漂亮,我一直在使用Ajax updatepanels,如果用户选择Yes,它将只显示一个文本框来保持这个yes值。
现在我已经能够成功完成这项工作,但每个问题都是它自己的radiobutton组,并且有自己的面板来更新可见性,这意味着我目前正在进行的方式有很多冗余代码,如
Protected Sub rdoShowOriginalEquipment(ByVal sender As Object, ByVal e As System.EventArgs)
If rdoOEYes.Checked = True Then
pnlOriginalEquipment.Visible = True
ElseIf rdoOENo.Checked = True Then
pnlOriginalEquipment.Visible = False
End If
End Sub
对于每个具有“是/否”选项的问题,等等。我毫不怀疑有更好的方法来做到这一点。我想知道是否有一种方法可以通过与radiobutton组关联的面板,所以我可以在代码中使用单个方法来触发所有radiobutton回发,类似(不是真正的代码)
Protected Sub showPanel(RadioButtonGroup, panel)
If rdoYes.Checked = True Then
panel.Visible = True
ElseIf rdoNo.Checked = True Then
panel.Visible = False
End If
End Sub
或者有更好的方法来处理这样的问题吗?如果能够减少我现在正在输入的冗余代码量,我会采用不同的方法。我正在使用VB,但我知道C#所以如果有人能够流利地使用答案,我就可以解释它。
非常感谢任何帮助。
答案 0 :(得分:1)
这是一个有效的代码:
<asp:Panel ID="Question1" runat="server">
<asp:RadioButton GroupName="Q1" runat="server" ID="Q1Yes" Text="Yes" OnCheckedChanged="AnswerChanged" AutoPostBack="true" />
<asp:RadioButton GroupName="Q1" runat="server" ID="Q1No" Text="No" OnCheckedChanged="AnswerChanged" AutoPostBack="true" />
<asp:Panel runat="server" ID="Q1Panel">Some text here</asp:Panel>
</asp:Panel>
<asp:Panel ID="Question2" runat="server">
<asp:RadioButton GroupName="Q2" runat="server" ID="Q2Yes" Text="Yes" OnCheckedChanged="AnswerChanged" AutoPostBack="true" />
<asp:RadioButton GroupName="Q2" runat="server" ID="Q2No" Text="No" OnCheckedChanged="AnswerChanged" AutoPostBack="true" />
<asp:Panel runat="server" ID="Q2Panel">Some text here</asp:Panel>
</asp:Panel>
请注意,所有单选按钮都具有相同的OnCheckedChanged处理程序,并且其AutoPostBack = True
您可以在必要时放置UpdatePanel
//代码背后:
protected void AnswerChanged(object sender, EventArgs e)
{
RadioButton rbAnswer = (RadioButton)sender;
if (rbAnswer.Checked)
{
string panelID = rbAnswer.GroupName + "Panel";
if (rbAnswer.Text == "Yes")
rbAnswer.Parent.FindControl(panelID).Visible = true;
else
rbAnswer.Parent.FindControl(panelID).Visible = false;
}
}
您也可以使用DataBound控件(例如GridView),但您的问题会有一个列表。
快乐编码