0

コントロールを動的に表示しています。ラジオ ボタンを除くすべてのコントロールを適切な値で表示できます。ラジオ ボタン リストは正しくレンダリングされていますが、その値はチェックされていません。

foreach (var radio in item.RadioButtonList)
    {
        //Option 1

        @Html.RadioButton(radio.Text, radio.Checked) @:  @radio.Text  

        //Option 2

        @Html.RadioButton(name: radio.Text, value: radio.Checked, isChecked: radio.Checked)*@

        //Option 3

        <input type="radio" value="radio.Text"  checked="@radio.Checked"/> @:&nbsp; @radio.Text &nbsp;
     }

私のモデルは

 public class FromElement
 { 
     public List<CBRBControl> RadioButtonList { get; set; }
 }

 public class CBRBControl
 {
     public string Text { get; set; }

     public bool Checked { get; set; }

     public string IsRadioChecked { get; set; }
 }

私のコントローラー

 public ActionResult FormDetails(int formID)
 {
            if (form.Field_Type_Name == "Radio Button")
            {
                radioList = new List<CBRBControl>();

                // For option 1 and 2

                radioList.Add(new CBRBControl
                {
                    Checked = true,
                    Text = "Radio Test 1"
                });

                radioList.Add(new CBRBControl
                {
                    Checked = false,
                    Text = "Radio Test 2"
                });

                // For option 3

                radioList.Add(new CBRBControl
                {
                    IsRadioChecked = "checked",
                    Text = "Radio Test 1"
                });

                radioList.Add(new CBRBControl
                {
                    Text = "Radio Test 2"
                });

                form.RadioButtonList = radioList;

            }

そこの方法を使ってこれを動かしてみました。オプション 1 と 2 では、リスト内のラジオ ボタンはどれもチェックされず、オプション 3 ではすべてのラジオ ボタンが選択されています。

オプション 1 の場合、生成される html は次のとおりです。

<input id="Radio_Test_1" name="Radio Test 1" type="radio" value="True"> &nbsp; Radio Test 1 &nbsp;
<input id="Radio_Test_2" name="Radio Test 2" type="radio" value="False"> &nbsp; Radio Test 2 &nbsp;  

オプション 2 の場合、生成される html は

<input checked="checked" id="Radio_Test_1" name="Radio Test 1" type="radio" value="True"> &nbsp; Radio Test 1 &nbsp;
<input id="Radio_Test_2" name="Radio Test 2" type="radio" value="False"> &nbsp; Radio Test 2 &nbsp;

オプション 3 の場合、生成される html は次のとおりです。

<input type="radio" value="radio.Text" checked="checked"> &nbsp; Radio Test 1 &nbsp;
<input type="radio" value="radio.Text" checked=""> &nbsp; Radio Test 2 &nbsp;
4

1 に答える 1

0

からの間違ったオーバーロードを使用していRadioButtonます。Valueまた、このコントロールにもを提供する必要があります。

モデルを次のように変更します。

public class CBRBControl
{
    //
    // Name should be unique, given that the HTML.RaadioButton,
    // will use this to generate the input attribute id, that
    // must be unique in the sabe HTML document
    //
    public string Name { get; set; }
    public string Text { get; set; } 
    public string Value { get; set; }
    public bool IsChecked { get; set; }
}

そして、次のように Html.RadioButton から正しいオーバーロードを使用します。

@foreach (var radio in Model.RadioButtonList)
{
  @Html.RadioButton(radio.Name, radio.Value, radio.IsChecked) @:&nbsp; @radio.Text &nbsp;
}

生成される HTML は次のようになります。

<input id="radio_0" name="radio_0" type="radio" value="1" /> &nbsp; Radio Test 1 &nbsp;
<input checked="checked" id="radio_1" name="radio_1" type="radio" value="2" /> &nbsp; Radio Test 2 &nbsp;
于 2013-08-08T19:51:55.247 に答える