2

我有男性和女性选项的单选按钮,但问题是它们都被选中而不是任何一个。

我的控制器:

 private List<SelectedGenderModel> GetGender()
        {
            var gender = new List<SelectedGenderModel>();
            gender.Add(new SelectedGenderModel { Name = "Male", Id = 1, Selected = false });
            gender.Add(new SelectedGenderModel { Name = "Female", Id = 2, Selected = false });
            return gender;
        }

我的观点:

@model MvcDemo.Models.EmployeeModel
 @for (int i = 0; i < Model.Gender.Count; i++)
                {
                    @Html.RadioButtonFor(m => m.Gender[i].Selected, new { id = "gender_" + i, name = "gendernm_" })
                    @Html.HiddenFor(m => m.Gender[i].Id)
                    @Html.HiddenFor(m => m.Gender[i].Name)
                    @Html.DisplayFor(m => m.Gender[i].Name)
                }

我的视图模型:

public class EmployeeModel
    {
            public int Id { get; set; }
            public string Fullname { get; set; }
            public List<SelectedGenderModel> Gender { get; set; }
    }

我的数据模型:

public partial class EmployeeMaster
    {
        public int Id { get; set; }
        public string Fullname { get; set; }
        public Nullable<bool> Gender { get; set; }
    }

那么如何防止多选单选按钮?

4

1 回答 1

1

您的循环正在呈现 2 个具有不同名称 (name="Gender[0].Selected"name="Gender[1].Selected") 的单选按钮,这意味着它们属于 2 个不同的组。您可能认为这new { name = "gendernm_" }是在修改name属性,但幸运的是它不是(否则模型绑定会在回发时失败)。

不清楚为什么你的数据模型有属性bool? Gender(一个值true应该是男性还是女性?null值是什么意思?也许bool IsMale或者bool IsFemale可能对其他人更有意义,但为什么不直接将其设为字符串(或枚举) ?

将您的视图模型更改为

public class EmployeeModel
{
  public int Id { get; set; }
  public string Fullname { get; set; }
  [Required]
  public string Gender { get; set; }
}

并且在视图中

@Html.RadioButtonFor(m => m.Gender, "Male", new { id = "Male" })
<label for"Male">Male</label>
@Html.RadioButtonFor(m => m.Gender, "Female", new { id = "Female" })
<label for"Female">Female</label>
@Html.ValidationMessageFor(m => m.Gender)

如果您确实想让它为可空的布尔值,那么您可以使用

@Html.RadioButtonFor(m => m.Gender, "True", new { id = "Male" })
<label for"Male">Male</label>
@Html.RadioButtonFor(m => m.Gender, "False", new { id = "Female" })
<label for"Female">Female</label>
@Html.RadioButtonFor(m => m.Gender, "", new { id = "Unknown" })
<label for"Unknown">Not sure</label>
于 2015-02-23T06:25:02.587 回答