所有单选按钮都组合在一起,用于模型列表中的所有项目

时间:2015-02-01 09:47:09

标签: asp.net .net c#-4.0 asp.net-mvc-5

我正在使用MVC5

情况: 我的视图遍历Person类列表,其属性如下:

int Id
string Name
string City
string ChosenText
List<string> SomeTextList

这个字符串列表将是随机生成的字符串。

在迭代列表时,所有SomeTextList都应显示为单选按钮。因此,每个人都有:

  • 一个名称为
  • 的文本框
  • City的一个文本框
  • SomeTextList的单选按钮组

代码是:

@foreach (var item in Model)
{
    @Html.EditorFor(modelItem => item.Name)
    <br />
    @Html.EditorFor(modelItem => item.Name) 
    @foreach (var ans in item.SomeTextList)
    {
        @Html.RadioButtonFor(modelItem => item.ChosenText, "ans")@Html.Label(ans)
    }
}

问题: 对于所有人来说,单选按钮作为一个组,即我只能从所有人员列表中选择一个自由文本单选按钮。

目标: 对于每个人,我应该能够选择一个单选按钮。

1 个答案:

答案 0 :(得分:0)

您需要使用for循环来生成集合中的控件(不是foreach循环,它会生成重复的nameID属性,并且不会回发到一个集合)

因为您生成相同名称属性<input type="radio" name="ChosenText" ... />的每个单选按钮,所以它们都属于同一组,只允许选择一个。

for(int i = 0; i < Model.Count; i++)
{
  @Html.EditorFor(m => m[i].Name)
  <br />
  @Html.EditorFor(m => m[i].City) 
  @foreach (var ans in Model[i].SomeTextList)
  {
    <label>
      @Html.RadioButtonFor(m => m[i].ChosenText, ans)
      <span>@ans</span>
    </label>
  }
}

这将生成(对于单选按钮)

<input type="radio" name="[0].ChosenText" value="abc" />
<input type="radio" name="[0].ChosenText" value="xyz" />
.....
<input type="radio" name="[1].ChosenText" value="abc" />
<input type="radio" name="[1].ChosenText" value="xyz" />