如何在表格</display>上处理许多“是/否如果<display textbox =”“>”

时间:2012-05-29 14:15:46

标签: c# asp.net vb.net

我正在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#所以如果有人能够流利地使用答案,我就可以解释它。

非常感谢任何帮助。

1 个答案:

答案 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),但您的问题会有一个列表。

快乐编码