我在Razor视图中的列表中显示。其中我有几个编辑器模板显示在列表视图中。这是我的编辑模板。EditorTemplate中的模型活页夹数据问题
@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; }
}
如何正确绑定的单选按钮视图模型?
当我读取代码中的标记时,我列表中的所有模型都具有相同的标识:Question.SelectedAnswer
。我认为这是错误的,因为应该有这样的索引ID:Question.SelectedAnswer.[INDEX]
。
UPDATE:
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));
}
}
所以,你有多个问题,并想添加一个foreach在显示它们视图?不知道我是否明白,请你澄清一下吗? –
最后一个剃须刀视图是EditorTemplate。是的,我有多个问题,我通过我的控制器逐个显示。让我更好地向您展示代码 –