2015-02-23 83 views
2

我有男性和女性選項的單選按鈕,但問題是他們都選擇而不是任何一個。如何防止在mvc中多次選擇Razor控件單選按鈕?

我的控制器:

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; } 
    } 

那麼我如何防止單選按鈕的多選?

+0

在每個循環中,您只渲染一個單選按鈕。他們在不同的羣體!爲什麼你需要一個模型(而不是僅僅綁定到一個屬性'字符串性別'與男性和女性2單選按鈕)? – 2015-02-23 05:50:58

+0

我將存儲0和1的性別,我已經創建了性別模型,根據選定的單選按鈕獲取選定的性別 – CodeScanner 2015-02-23 05:53:30

+0

然後包含一個屬性'int Gender {get;組; }'並將2個單選按鈕綁定到該屬性(但爲什麼要使用'0'或'1'? - 使其成爲字符串或枚舉)。沒有顯示的代碼是必要的。 – 2015-02-23 05:57:06

回答

1

您的循環渲染了2個具有不同名稱的單選按鈕(name="Gender[0].Selected"name="Gender[1].Selected"),這意味着它們屬於2個不同的組。您可能會認爲new { name = "gendernm_" }正在修改name屬性,但幸運的是(否則模型綁定將在回發後失敗)。

不清楚爲什麼你的數據模型具有財產bool? Gender(假定的true值是指男性還是女性?又是什麼一個null值意味着什麼?也許bool IsMalebool 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> 
+0

但你不覺得在表中存儲男性或女性只是浪費存儲 – CodeScanner 2015-02-23 06:29:57

+0

你的解決方案是好的,但在這裏你已經寫了兩個時間單選按鈕,因爲你知道有2個選項,即男性和女性。但如果值爲單選按鈕是從數據庫then.like假設男性和女性來自數據庫或從服務器端,如我在我的方法中顯示,然後? – CodeScanner 2015-02-23 06:33:14

+1

當然不是。它的意義不大(你總是可以使它成爲'char(1)'並將值存儲爲「M」和「F」(2個字節)。可讀性在這裏非常重要,除了你自己以外, true'應該表示 – 2015-02-23 06:34:16

相關問題