所有单选按钮都在型号列表中的所有项目组合在一起(All radio buttons are grou

2019-10-21 18:14发布

我使用MVC5

现状:我认为通过Person类的一个列表上循环,其中属性如下:

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

字符串的这份名单将被随机生成的字符串。

同时通过列表迭代所有SomeTextList应显示为单选按钮。 因此,对于每个人都在那里是:

  • 一个文本框的名字
  • 一个文本框的城市
  • 对于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)
    }
}

问题:对于所有的人的单选按钮为一组,即,我可以从所有的人列表中只选择一个自由文本单选按钮。

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

Answer 1:

你需要使用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" />


文章来源: All radio buttons are grouped together for all the items in the model list