0

ラジオボタン リストのリストをページに動的に追加しています。ボタンをクリックすると、選択した値を保存したいと思います。以下のサンプル コードに従っています。これらの動的に作成された RadioButtonLists の selectedIndexes を取得するにはどうすればよいですか? 他の同様の質問からオンラインでさまざまな修正を試みることに一日の大半を費やしましたが、うまくいきませんでした。Chrome で「Inspect Element」を使用すると、表向きは割り当てた ID (RBQuestion_1、RBQuestion_2 など) を使用して、目的の場所に RadioButtonLists を表示できます。

Sub BindForm()

Dim tblStars As New Table()
    Dim rb As New RadioButtonList()
    rb.ID = RBQuestion_" & row("Id")
    Dim tc As New TableCell()
    Dim tr As New TableRow()
    tc.Controls.Add(rb)
    tr.cells.Add(tc)

    tblStars.Rows.Add(tr)

    form1.Controls.Add(tblStars)
Next
end sub


 Protected Sub btnSave_click(ByVal sender As Object, ByVal e As EventArgs)

For Each ctrl As Control In Page.FindControl(RBQuestion_" & row("Id"))
            If TypeOf ctrl Is RadioButtonList Then
                Dim rbl As RadioButtonList = DirectCast(ctrl, RadioButtonList)
                For i As Integer = 0 To rbl.Items.Count - 1
                    If rbl.Items(i).Selected Then
                        'get the  value of the selected radio button'
                        Dim value As String = rbl.SelectedItem.Value
                    End If
                Next
            End If
        Next
end sub
4

1 に答える 1

1

ページのコントロール リストの中を見ています。

ラジオボタンはありません。これらは、追加した TableCell のコントロール リスト内にあります。

テーブルを見つけてから、各行をステップスルーし、各行でセルを見つけてから、セル内でラジオボタンを見つける必要があります。

または、ボタンを作成するときに、RadioButton タイプのオブジェクト スコープのジェネリック リスト コントロールにボタンを追加することもできます。次に、btnSave_Click イベント ハンドラー内からそれらを直接参照します。長所:コントロール階層をナビゲートする必要がなくなります。短所:実際の基礎となる実装からコードを遠ざけます。これは、将来開発者が見たときに、これらのコントロールの実際の場所に関して誤解を招く可能性があります.自分が何をしたか、なぜ行ったかを忘れる時間があった後、自分自身を含む可能性のあるセット. 私にとって、それは通常、天気の良い日に約 4 時間です。

したがって、実際に物事がどのようにレイアウトされているかにより忠実であるため、階層をナビゲートする方法を好みます。しかし、一般的なリスト メソッドも機能すると確信しています。


編集

あなたが見逃しているパズルのピースは、CreateChildControls メソッドをオーバーライドしていると思います。

あなたの質問がVBで表現されたことを認めます。しかし、私は VB が苦手なので、代わりに C# を使用しました。これがあなたにとって使いやすいことを願っています。

ASP.NET 開発サーバーでホストしている場合、これが VS 2010 で期待どおりに機能することを確認しました。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication3
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected override void CreateChildControls()
        {
            base.CreateChildControls();

            this.CreateRadioButtons();
        }

        private void CreateRadioButtons()
        {
            var tblStars = new Table();
            tblStars.ID = "tblStars";

            ListItem opt1 = new ListItem();
            opt1.Text = "I like red";
            opt1.Value = "Red";

            ListItem opt2 = new ListItem();
            opt2.Text = "I like green";
            opt2.Value = "Green";

            ListItem opt3 = new ListItem();
            opt3.Text = "I like blue";
            opt3.Value = "Blue";

            var rb = new RadioButtonList();
            rb.ID = "RBQuestion_1";

            rb.Items.Add(opt1);
            rb.Items.Add(opt2);
            rb.Items.Add(opt3);

            var tc = new TableCell();
            var tr = new TableRow();
            tc.Controls.Add(rb);
            tr.Cells.Add(tc);
            tblStars.Rows.Add(tr);

            form1.Controls.Add(tblStars);
        }

        protected void btnSave_Click(object sender, EventArgs e)
        {
            var tblStars = this.form1.FindControl("tblStars") as Table;
            if (tblStars == null)
                return;

            foreach (TableRow row in tblStars.Rows)
            {
                foreach (TableCell cell in row.Cells)
                {
                    var rb = cell.FindControl("RBQuestion_1") as RadioButtonList;
                    if (rb == null)
                        continue;

                    var selectedValue = rb.SelectedValue;
                }
            }
        }
    }
}

私の対応するページのマークアップ:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication3.WebForm1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click" />
    </div>
    </form>
</body>
</html>
于 2013-07-25T05:17:52.700 に答える