2014-01-05 104 views
0

這裏是我的視圖模型@html剃刀單選按鈕mvc5

public class UserResponseModel 
    { 
     public string QuestionId { get; set;} 

     public string QuestionText { get; set; } 

     public bool IsChecked { get; set; } 


    } 

所以,對於複選框這個精美的作品

for (var i = 0; i < Model.UserResponses.Count; i++) 
    { 
     <div class="row"> 
      <div class="col-md-4"> 
       <div class="form-group"> 

        @Html.HiddenFor(x => x.UserResponses[i].QuestionId) 
        @Html.CheckBoxFor(x => x.UserResponses[i].IsChecked) 

但單選按鈕,這並不

for (var i = 0; i < Model.UserResponses.Count; i++) 
    { 
     <div class="row"> 
      <div class="col-md-4"> 
       <div class="form-group"> 

        @Html.HiddenFor(x => x.UserResponses[i].QuestionId) 
        @Html.RadioButtonFor(x => x.UserResponses[i].IsChecked, new { Name = "grp1" }) 
        @Html.DisplayTextFor(x => x.UserResponses[i].QuestionText) 

當我提交表單然後IsChecked總是假的 - 爲什麼 - 我缺少什麼 - 正如我提到的複選框,它工作得很好。我看過這個問題here但我不確定爲什麼單選按鈕在視圖模型中需要額外的屬性才能在複選框透明工作時保持正確的答案。

編輯:我的問題模型現在既然這麼

public class QuestionModel 
    { 
     public string WhichQuestion { get; set; } 

     public int PointsObtained { get; set; } 

     public bool CorrectAnswer { get; set; } 

     private List<UserResponseModel> _userResponse; 
     public List<UserResponseModel> UserResponses 
     { 
      get { return _userResponse ?? (_userResponse = new List<UserResponseModel>()); } 
      set { _userResponse = value; } 
     } 
    } 

通知剛纔說我公佈爾CorrectAnswer {獲得;組; }

在我看來,這裏的代碼

for (var i = 0; i < Model.UserResponses.Count; i++) 
    { 
     <div class="row"> 
      <div class="col-md-4"> 
       <div class="form-group"> 

        @Html.HiddenFor(x => x.UserResponses[i].QuestionId) 
        @Html.HiddenFor(x => x.CorrectAnswer) 
        @Html.HiddenFor(x => x.UserResponses[i].IsChecked) 
        @Html.RadioButtonFor(x => x.UserResponses[i].IsChecked, Model.CorrectAnswer, new { Name = "grp1" }) 

編輯2:

@Html.HiddenFor(x => x.UserResponses[i].QuestionId) 
        @Html.HiddenFor(x => x.SelectedAnswerId) 
        @Html.HiddenFor(x => x.UserResponses[i].IsChecked) 
        @Html.RadioButtonFor(x => x.UserResponses[i].IsChecked, Model.SelectedAnswerId, new { Name = "grp1" }) 

EDIT3:

public class QuestionModel 
    { 
     public string WhichQuestion { get; set; } 

     public int PointsObtained { get; set; } 



     private List<UserResponseModel> _userResponse; 
     public List<UserResponseModel> UserResponses 
     { 
      get { return _userResponse ?? (_userResponse = new List<UserResponseModel>()); } 
      set { _userResponse = value; } 
     } 
    } 

public class UserResponseModel 
    { 
     public string QuestionId { get; set;} 

     public string QuestionText { get; set; } 



     public string SelectedQuestionId { get; set; } 

    } 

終於,我的觀點

for (var i = 0; i < Model.UserResponses.Count; i++) 
    { 
     <div class="row"> 
      <div class="col-md-4"> 
       <div class="form-group"> 

        @Html.HiddenFor(x => x.UserResponses[i].QuestionId) 
        @Html.RadioButtonFor(x => x.UserResponses[i].SelectedQuestionId, Model.UserResponses[i].QuestionId, new { Name = "grp1" }) 
        @*@Html.CheckBoxFor(x => x.UserResponses[i].IsChecked)*@ 
        @Html.DisplayTextFor(x => x.UserResponses[i].QuestionText) 

編輯4:所以最後我得到一些 這個作品!

@Html.RadioButtonFor(x => x.UserResponses[i].SelectedQuestionId, Model.UserResponses[i].QuestionId) 

我現在可以看到selectedquestionid填充在我httppost方法,但如果我這樣做

@Html.RadioButtonFor(x => x.UserResponses[i].SelectedQuestionId, Model.UserResponses[i].QuestionId, new {Name="grp"}) 

然後我雖然能只有一個選擇單選按鈕的selectedquestionid 空上httppost - 奇怪

+0

這可能會幫助你http://www.techiesweb。net/radio-button-list-in-asp-net-mvc/ – Shyju

+0

@Shyju看到我的edit4 – usr28765526

回答

4

單選按鈕不是複選框。單選按鈕被分組。這意味着您的視圖模型上應該有一個屬性來保存選定的單選按鈕值(如answer you linked to所示)。使用複選框可以選擇多個複選框,這就是你將它們綁定到視圖模型中的一組布爾值。另一方面,單選按鈕只有一個可能的選定值,因爲它們是互斥的。這就是爲什麼它們都應該綁定到視圖模型上的一個屬性,它將保存選定的單選按鈕值。

所以在你的問題和答案的例子中,你有一個問題視圖模型,將包含問題ID和文本以及可能的答案列表。每個答案將由一個id和文本表示。您的問題視圖模型也將具有一個答案屬性,該屬性將保存來自用戶的所選答案單選按鈕。這是你將要綁定所有單選按鈕的屬性。但具有不同的價值。

+0

我已經做了一些類似於我鏈接到的問題的答案,我如何獲得存儲在屬於問題模型的CorrectAnswer – usr28765526

+1

您只需將一個屬性'SelectedAnswerId'添加到您的視圖模型。然後,將所有單選按鈕綁定到此屬性。給定問題的正確答案不應該是您的視圖模型的一部分。這是一個應該只存在於數據庫和域模型中的信息。當用戶提交表單時,您將獲得視圖模型上的'SelectedAnswerId'屬性值以及問題ID。現在你要檢查你的數據庫是否這是問題的正確答案。 –

+0

「正確的答案......」 - 當然 - 我明白了 - 所以SelectedAnswerId將在QuestionModel中,但我如何將它綁定到單選按鈕 - 如果你能告訴我一些代碼,我會非常感謝它 – usr28765526