0

紙のフォームを複製するために ASP.Net でフォームを作成しています (設計については何も言えません。単にデジタルで再作成することを任されています)。このフォームには、「はいまたはいいえで答えてください。はいの場合は、金額を指定してください」という行に沿って多くの質問があります。私は現在、質問をリストし、グループに2つのラジオボタンを付けて処理しています。1つは「はい」、もう1つは「いいえ」です。これをもう少しきれいにするために、ユーザーが [はい] を選択した場合にこの [はい] の値を保持するテキスト ボックスのみを表示する Ajax updatepanels を使用しています。

これで問題なく実行できましたが、各質問は独自のラジオボタン グループであり、可視性を更新するための独自のパネルがあります。つまり、現在行っている方法では、次のような冗長なコードがたくさんあります。

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# を知っているので、誰かがそれに精通していれば、問題なく解釈できます。

どんな助けでも大歓迎です。

4

1 に答える 1

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 など) を使用することもできますが、質問にはリストがあります。

ハッピーコーディング

于 2012-05-29T15:08:22.737 に答える