私はメインビューと部分ビューを持っています:
// // GET: /質問/追加/
public ActionResult Add()
{
return View();
}
//
// Post: /Question/GetAnswerContainers/
[HttpPost]
public ActionResult GetAnswerContainers(int count)
{
ViewBag.AnswerCount = count;
return PartialView();
}
メイン ビューはかなり単純なものです。
@using (@Html.BeginForm())
{
@Html.AntiForgeryToken()
<fieldset>
<legend>Add Question Form</legend>
<div id="question_answers">
@Html.LabelFor(m => m.AnswerCount)
@Html.TextBoxFor(m => m.AnswerCount,
new {
@class = "answer_count",
action = @Url.Action("GetAnswerContainers")
})<br/>
@Html.ValidationMessageFor(m => m.AnswerCount)<br/>
<div id="answers"></div>
</div>
<input type="submit" value="Add" />
</fieldset>
}
また、テキスト ボックスに jQuery を使用しています。
$(function () {
$('#question_answers input[type="text"].answer_count').keyup(function () {
var answerCount = $(this).val();
if (isNaN(answerCount))
return;
$.ajax({
type: 'POST',
data: { count: $(this).val() },
url: $(this).attr("action"),
timeout: 2000,
async: false,
success: function (data) {
removeAnswers();
addAnswers(data);
$('form').removeData('validator');
$('form').removeData('unobtrusiveValidation');
$.validator.unobtrusive.parse('form');
},
error: null
});
});
});
function addAnswers(data) {
var answersContainer = $('#question_answers #answers');
answersContainer.append($((data)));
}
部分的なビュー:
@model Quiz.Models.Question.QuestionAnswer
@Html.LabelFor(m => m.AnswerText)
@for (var i = 0; i < ViewBag.AnswerCount; i++)
{
@Html.TextBoxFor(m => m.AnswerText)
@Html.ValidationMessageFor(m => m.AnswerText)
}
モデル:
public class QuestionAnswer
{
[Required]
[Display(Name = "Answers")]
public string AnswerText { get; set; }
}
したがって、標準のasp.netクライアント側の検証がQuestionAnswerモデルの多くのオブジェクトで処理できないという私の問題は、ループから最初のtextBoxを取得し、for
それをすべての部分ビューの検証に使用することです。クライアント側で 1 つのモデルから多くのオブジェクトを適切に検証することは可能ですか?