かみそりビューのリストに表示しています。その中には、リストビューに表示されるいくつかのエディターテンプレートがあります。これが私のエディタテンプレートです。
@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
しかし、エディターテンプレートからは、ラムダ式内のインデックスを知る方法がありません。
これは私が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));
}
}