2012-05-29 28 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