私は単純な質問データモデルを持っています:
public class Question {
int QuestionId { get; set; }
string Text { get; set; }
string Answer { get; set; }
string ValidationMessage { get; set; }
};
このクラスを使用して、ビュー モデルを作成しました。
public class QuestionViewModel {
string Introduction { get; set; }
IEnumerable<Question> Questions { get; set; }
};
私のコントローラーは、(データソースから)ビューモデルを構築し、ビューをレンダリングします:
@model QuestionViewModel
@using (Html.BeginForm()) {
if (Model.Questions != null) {
<ol>
@Html.EditorFor(m => Model.Questions)
</ol>
}
@Html.ValidationSummary("Unable to process answers...")
<input type="submit" value="submit" />
}
このビューは EditorTemplate を利用します。
@model Question
<li>
@Html.HiddenFor(m => m.Questionid)
@Html.TextBoxFor(m => m.Answer)
@Html.ValidationMessageFor(m => m.Answer)
</li>
今のところ、ページがポストバックされると、コントローラーは応答を検証します。
[HttpPost]
public ActionResult Response(QuestionViewModel model) {
if (ModelState.IsValid) {
for (int i = 0; i < model.Questions.Count(); i++) {
Question q = model.Questions[i];
string questionId = String.Format("Questions[{0}]", i);
if (String.IsNullOrWhiteSpace(q.Answer)) {
ModelState.AddModelError(questionId, q.ValidationMessage);
}
}
}
}
私が抱えている問題は、これのほとんどが正常に機能することです-検証と検証の概要に正しい検証メッセージが表示されます。問題は、エラーをレンダリングする個々のフィールド バリデータを取得できないことです。
<span class="field-validation-valid" data-valmsg-replace="true" data-valmsg-for="Questions[0].StringValue"></span>
ご覧のとおり、ModelState.AddModelError() メソッドを呼び出すと、現在「Questions[0]」形式のキー値を使用していますが、「Questions_0」やその他のさまざまな組み合わせも試しました。
ヘルプ/ガイダンスをいただければ幸いです。
【長文失礼しました】