2

コントロールを使用する場合RadioButtonList、次のコード ビハインドで選択した値にアクセスできます。

rbMyButtons.SelectedValue

HtmlInputRadioButtonただし、レンダリングされたマークアップをより詳細に制御できるようにするため、代わりにコントロールを使用したいと思います。そのリストを使用している場合<input type="radio" runat="server" />、私の知る限り、次のようにする必要があります。

if (rbMyButtonsOption1.Checked)
{
    ...
}
else if (rbMyButtonsOption2.Checked)
{
    ...
}
else if ...

を使用RadioButtonList.SelectedValue せずに の動作を模倣できる方法はありRequest.Form["name"]ますか?

4

3 に答える 3

3

これが私がそれを行う方法です:

最初に、Html コントロールをパネルまたは同様のグループ化オブジェクト内にラップします (パネルは div としてレンダリングされます)。

<asp:Panel runat="server" ID="ButtonList" ClientIDMode="Static">
   <input type="radio" name="seasons" value="Spring" runat="server" />Spring <br/>
   <input type="radio" name="seasons" value="Summer" runat="server" /> Summer <br/>
   <input type="radio" name="seasons" value="Fall" runat="server" /> Fall <br/>
   <input type="radio" name="seasons" value="Winter" runat="server" /> Winter <br/>
</asp:Panel>

次に、拡張メソッドを作成して、パネルの ControlCollection プロパティにアクセスし、コレクションを反復処理します。

public static class HelperFunctions
{
    public static string GetRadioButtonValue(this ControlCollection collection)
    {
        foreach (var control in collection)
        {
            if (control is HtmlInputRadioButton)
            {
                var radioControl = ((HtmlInputRadioButton)control);
                if (radioControl.Checked)
                {
                    return radioControl.Value;
                }
            }
        }

        //If no item has been clicked or no Input Radio controls are present we return an empty string
        return String.Empty;
    }
}

最後に、値を簡単に取得できます。

var selectedValue = ButtonList.Controls.GetRadioButtonValue();
于 2013-06-25T13:02:39.070 に答える
1

これを見つけるために検索を行ったので、質問が1年以上前のものでも役立つかもしれないと思いました...

私はちょうどこの問題に出くわしました。各選択に対して追加の HTML「data-*」属性を含める必要があったため、use [input type="radio" runat="server" ...] を使用する必要がありました。

ここで2つの回答を組み合わせて使用​​ して、解決策を見つけました。

私のHTMLは次のようになります:

<div id="pnlOpts" runat="server">
   <input type="radio" name="rblReason" runat="server" value="1" /> <label>Opt 1</label><br />
   <input type="radio" name="rblReason" runat="server" value="3" data-att="1" /> <label>Supplied Reason 1 </label><br />
   <input type="radio" name="rblReason" runat="server" value="3" data-att="2" /> <label>Supplied Reason 2 </label><br />
   <input type="radio" name="rblReason" runat="server" value="3" data-att="3" /> <label>Supplied Reason 3 </label><br />
</div>

私のコードビハインドは次のようになります:

if(pnlOpts.Controls.OfType<HtmlInputRadioButton>().Any(a=>a.Checked))
{
    HtmlInputRadioButton selected = pnlOpts.Controls.OfType<HtmlInputRadioButton>().Where(a => a.Checked).FirstOrDefault();
    var btnValue = selected.Value;
    var dataAttVal = selected.Attributes["data-att"];
    ...
}
于 2014-08-18T09:58:17.347 に答える
0

LINQ を使用して、この動作を模倣できます。

var radioButtons = new[] { rbMyButtonsOption1, rbMyButtonsOption2 };
var checkedRadioButton = radioButtons.FirstOrDefault(i => i.Checked);
if (checkedRadioButton != null)
{
    // do something...
}
于 2013-06-25T11:59:22.883 に答える