2012-05-29 31 views
0

上的许多“是/否,如果是” 我在ASP.Net中创建一个表单来复制纸质表单(我在设计中没有发言权,我的任务仅仅是以数字方式重新创建它)。这种形式有许多问题,如“回答是或否,如果是,请指定多少”。我现在正在处理它,通过列出问题,然后在一个组中有两个单选按钮,一个说“是”,一个是“否”。为了使这个更漂亮一点,我一直在使用Ajax更新面板,如果用户选择是,它将只显示一个文本框来保存这个yes值。 如何处理表格

现在我已经能够成功地做到这一点,但每个问题都是它自己的单选按钮组,并有其自己的面板来更新可见性,这意味着我目前正在做的方式有很多冗余代码像

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 

对于每一个有/没有类似选项的问题,依此类推。我毫不怀疑有更好的方法来做到这一点。我在想,如果有一种方法,我可以通过与单选按钮组关联的面板,所以我可以使用代码中的一个单一的方法,将火为单选按钮回传,像(不是真正的代码)

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

这里是一个工作代码:

<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 =真

你可以把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),但你会有你的问题有一个列表。

快乐编码

+0

太棒了,非常感谢您的帮助。 – JMill