我在Razor视图中的列表中显示。在其中我有几个编辑器模板显示在列表视图中。这是我的编辑模板。
@using Contoso.MvcApplication.Extensions
@model Contoso.MvcApplication.ViewModels.MultipleChoiceQuestionViewModel
<h5>@Model.Question.QuestionText</h5>
<div>
@Html.RadioButtonForSelectList(m => m.Question.SelectedAnswer, Model.AnswerRadioList)
@Html.ValidationMessageFor(m => m.Question.SelectedAnswer)
</div>
问题在于我设置了RadioButtonForSelectList
,它的绑定是如此,因为我知道在这种情况下应该在这样的for循环中:
@Html.RadioButtonForSelectList(m => m[i].Question.SelectedAnswer, Model.AnswerRadioList) // the index
但是从编辑模板中,我无法知道lambda表达式中的索引。
这是我从以下位置复制html扩展程序的网站:
http://jonlanceley.blogspot.mx/2011/06/mvc3-radiobuttonlist-helper.html
这是我正在使用的视图模型
public class MultipleChoiceQuestionViewModel
{
public MultipleChoiceQuestion Question { get; set; }
public List<SelectListItem> AnswerRadioList { get; set; }
}
如何正确绑定radioButton?
当我在代码中读取代码时,我列表中的所有模型都具有相同的ID:Question.SelectedAnswer
。我认为这是错误的,因为应该有一个索引ID,如:Question.SelectedAnswer.[INDEX]
。
更新:
public ActionResult Index(short testId)
{
GenerateQuiz(testId);
StartQuiz();
return View(CreateQuestionViewModel((MultipleChoiceQuestion)CurrentQuestion));
}
[HttpPost]
public ActionResult Index(MultipleChoiceQuestionViewModel q)
{
// Save answer state
((MultipleChoiceQuestion)CurrentQuestion).SelectedAnswer = q.Question.SelectedAnswer;
if (CurrentNumber == Questions.Count - 1)
{
QuizCompleted();
return RedirectToAction("ShowResults");
}
else
{
NextQuestion();
return View(CreateQuestionViewModel((MultipleChoiceQuestion)CurrentQuestion));
}
}
答案 0 :(得分:0)
显示问题的视图部分应如下所示:
@for (int j = 0; j < Model.Questions.Count; j++)
{
<h5>
Model.Questions[j].QuestionText
</h5>
<div>
@Html.RadioButtonForSelectList(m => m.Questions[j].SelectedAnswer, Model.AnswerRadioList)
</div>
}