1

リピーター内にアイテム テンプレートがあります。

   <ItemTemplate>
        <li>
            <input type="radio" 
                   value="<%# GetAssetId((Guid) (Container.DataItem)) %>" 
                   name="AssetId" 
                   <%# SelectAsset((Guid) Container.DataItem) %> />

        </li>
    </ItemTemplate>

IDを比較してラジオボタンをチェックするかどうかを決定するメソッドがあります。

protected string SelectAsset(Guid uniqueId)
{
    if (uniqueId == GetSomeId()) 
        return "checked=\"checked\"";

    return string.Empty;
}    

SelectAssetヒットしますが、ポストバックのラジオボタンは選択されませんが、ページを更新するだけで機能します。ここで何が間違っていますか?

ここで回答:更新後に「選択したラジオ ボタン」を表示する方法は? 達成不可能とのことですが、本当にそうなのですか?

ありがとうございました

アップデート

runat 属性がない場合、単純なコントロールではビュー ステートを使用できないようです。カスタム GroupRadioButton コントロールを使用してこれを解決しました。ご協力ありがとうございました。

4

2 に答える 2

3

RadioButtonList を使用することをお勧めします。

ページコード

<asp:RadioButtonList RepeatLayout="UnorderedList" OnSelectedIndexChanged="IndexChanged" AutoPostBack="true" ID="RadioRepeater" runat="server" />

<asp:Label ID="SelectedRadioLabel" runat="server" />

コードビハインド

if (!Page.IsPostBack)
{
    /* example adds items manually 
        - you could iterate your datasource here as well */
    this.RadioRepeater.Items.Add(new ListItem("Foo"));
    this.RadioRepeater.Items.Add(new ListItem("Bar"));
    this.RadioRepeater.Items.Add(new ListItem("Baz"));

    this.RadioRepeater.SelectedIndex = this.RadioRepeater.Items.IndexOf(new ListItem("Bar"));
    this.RadioRepeater.DataBind();
}

protected void IndexChanged(object sender, EventArgs e)
{
    this.SelectedRadioLabel.Text = string.Format("Selected Item Text: {0}", this.RadioRepeater.SelectedItem.Text);
}

1 つの項目を選択するだけでよいと思います。


コメントで説明されているようSelectedItemに、Page_Loadイベント ハンドラーで にアクセスすることもできます。

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        // previous code omitted
    }
    else
    {
        string foo = this.RadioRepeater.SelectedItem.Text;
    }
}
于 2012-05-02T13:01:08.537 に答える
1

すべてのコントロールを実行時に (コードから直接) 動的に作成している場合、状況は少し異なります。私が使用したコードは次のとおりです。

ページコード

<form id="form1" runat="server">
</form>

コードビハインド

    protected void Page_Load(object sender, EventArgs e)
    {
        RadioButtonList rbl = new RadioButtonList();
        rbl.AutoPostBack = true;
        rbl.SelectedIndexChanged += rbl_SelectedIndexChanged;

        rbl.Items.Add("All");

        // generate your dynamic radio buttons here
        for (int i = 0; i<5; i++)
        {
            rbl.Items.Add(string.Format("Dynamic{0}", i));
        }
        form1.Controls.Add(rbl);

        if (!Page.IsPostBack)
        {
            rbl.SelectedValue = "All";
            PopulateTextBox(rbl.SelectedValue);
        }

    }

    void rbl_SelectedIndexChanged(object sender, EventArgs e)
    {
        RadioButtonList foo = (RadioButtonList)sender;
        PopulateTextBox(foo.SelectedValue);
    }

    void PopulateTextBox(string selection)
    {
        TextBox box = new TextBox();
        box.Text = selection;
        form1.Controls.Add(box);
    }
于 2016-08-21T15:29:21.560 に答える