вот мой 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 - странно
Это может помочь вам: http: //www.techiesweb.net/radio-button-list-in-asp-net-mvc/ – Shyju
@Shyju см. мой edit4 – usr28765526