2014-01-05 3 views
0

вот мой ViewModel@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) 

, когда я представить форма then IsChecked всегда неверна - почему - что мне не хватает - как я упоминал для флажков, она работает нормально. Я посмотрел на этот вопрос here, но я не уверен, почему радиолюбители требуют дополнительных свойств в модели просмотра, чтобы правильно отвечать, когда флажки работают прозрачно.

Edit: моя модель Теперь вопрос, как так

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

уведомление я только добавил общественности BOOL 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" }) 

EDIT 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"}) 

тогда, хотя я могу выбрать только один RadioButton в selectedquestionid является нулем на HttpPost - странно

+0

Это может помочь вам: http: //www.techiesweb.net/radio-button-list-in-asp-net-mvc/ – Shyju

+0

@Shyju см. мой edit4 – usr28765526

ответ

4

Радиокнопки не являются флажками. Радио кнопки сгруппированы. Это означает, что у вас должно быть одно свойство в вашей модели просмотра, чтобы удерживать выбранное значение переключателя (как показано на рисунке answer you linked to). С помощью флажков вы можете выбрать несколько флажков, это то, что вы привязываете их к набору логических значений в вашей модели представления. С другой стороны, радиокнопки имеют только одно возможное выбранное значение, поскольку они являются взаимоисключающими. Вот почему все они должны быть привязаны к одному свойству модели вашего вида, которое будет удерживать выбранное значение переключателя.

Итак, в вашем примере вопросов и ответов у вас есть модель представления вопросов, которая будет содержать идентификатор вопроса и текст, а также список возможных ответов. Каждый ответ будет представлен идентификатором и текстом. Ваша модель просмотра вопросов также будет иметь свойство ответа, которое будет удерживать выбранную кнопку ответа от пользователя. Именно это свойство вы собираетесь связать со своим переключателем. Но с другой ценностью.

+0

Я сделал кое-что похожее на ответ на вопрос, с которым я связался, как мне добраться, чтобы сохранить идентификатор в CorrectAnswer, который принадлежит к вопросумодели – usr28765526

+1

Вы просто добавили свойство 'SelectedAnswerId' в свою модель. Затем вы привязываете все свои переключатели к этому свойству. Правильный ответ на данный вопрос не должен быть частью вашей модели представления. Это информация, которая должна жить только внутри вашей базы данных и моделей домена. Когда пользователь отправляет форму, вы получите значение свойства SelectedAnswerId для вашей модели представления, а также идентификатор вопроса. Теперь вы проверите в своей базе данных, является ли это правильным ответом на вопрос. –

+0

«правильный ответ ...» - конечно, я получаю это - так что SelectedAnswerId будет в QuestionModel, но как привязать его к переключателям - если бы вы могли показать мне какой-то код, я бы очень признателен за это – usr28765526

Смежные вопросы