0

我在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)); 
     } 
    } 
+0

所以,你有多个问题,并想添加一个foreach在显示它们视图?不知道我是否明白,请你澄清一下吗? –

+0

最后一个剃须刀视图是EditorTemplate。是的,我有多个问题,我通过我的控制器逐个显示。让我更好地向您展示代码 –

回答

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> 
} 
+0

我也是这样做的,但我不能这样做,因为问题可能有几个模板(FreeResponse,MultipleChoice,等等。)。这就是我使用EditorTemplates的原因 –