Как предотвратить множественный выбор переключателя Razor control в mvc?
У меня есть переключатель для опции Мужской и Женский, но проблема в том, что они оба выбраны вместо любого.
Мой контроллер:
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; }
}
Так как я могу предотвратить множественный выбор переключателя?
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)
Если вы хотите сделать это недействительным bool, то вы можете использовать
@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>