2014-01-05 3 views
0

여기이 아름답게@html 면도기 라디오 버튼 mvc5

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) 

않습니다 작동 체크 박스에 대한 나의 뷰 모델

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

     public string QuestionText { get; set; } 

     public bool IsChecked { get; set; } 


    } 

,이다 그때 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) 

EDIT4 : 이렇게 마침내 나는 어떤 것을 얻고있다 이 작품!

@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에 NULL의 참조 - 이상한

+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

제가 링크 된 질문에 대한 대답과 비슷한 것을했습니다. 어떻게 id를 질문 모델 – usr28765526

+1

에 속하는 올바른 답변보기 모델에 'SelectedAnswerId'속성을 추가하기 만하면됩니다. 그런 다음 모든 라디오 버튼을이 속성에 바인딩합니다. 주어진 질문에 대한 정답이 당신의 뷰 모델의 일부가되어서는 안됩니다. 이는 데이터베이스 및 도메인 모델 내부에만 존재해야하는 정보입니다. 사용자가 양식을 제출하면 뷰 모델과 질문 ID에서 'SelectedAnswerId' 속성 값을 가져옵니다. 이제이 질문에 대한 정답인지 여부를 데이터베이스에서 확인할 것입니다. –

+0

"정답 ..."- 당연히 - 내가 알기 때문에 SelectedAnswerId가 QuestionModel에 있지만 어떻게 라디오 버튼에 바인딩 할 것인가? 내가 정말로 고맙게 여기는 코드를 보여줄 수 있다면 – usr28765526

관련 문제