У меня есть форма с несколькими значениями для настраиваемого вопроса. Идея, являющаяся пользователем, может создавать собственный пользовательский вопрос с пользовательскими ответами. Одним из свойств объекта Модель представляет собой список объектов:Как использовать обязательную аннотацию данных для списка текстовых полей
public class CustomQuestion
{
public int Id { get; set; }
[Required]
public string QuestionName{ get; set; }
public virtual List<CustomQuestionAnswer> Answers { get; set; }
}
public class CustomQuestionAnswer
{
public int Id { get; set; }
[Required]
public string Answer { get; set; }
}
Теперь у меня есть это бритва, которая работает, чтобы создать ответы (я опустил остальную часть вопроса):
foreach (var answer in Model.Answers)
{
if (answer.IsActive)
{
<div class="form-group answer">
<div class="col-md-10">
@Html.Hidden("answers[" + count + "].Id", answer.Id)
@Html.TextBox("answers[" + count + "].Answer", answer.Answer, new { @class = "form-control" })
validation code will go here
</div>
<div class="col-md-2">
@Html.CheckBox("answers[" + count + "].IsActive", answer.IsActive)
</div>
</div>
count++;
}
}
Теперь все работает нормально и сохраняется в базе данных, за исключением того, что проверка данных не работает. У меня есть сообщения проверки данных, работающие для QuestionName CustomQuestion (поэтому я знаю, что это не проблема загрузки jquery), но не для ответов. Я попытался поместить эти линии в бритвенную форму:
@Html.ValidationMessageFor(m => answer.Answer, "", new { @class = "text-danger" })
@Html.ValidationMessage("Answers[" + count + "].Answer", "", new { @class = "text-danger" })
Но не работает. Кроме того, когда я нажимаю на кнопку сохранить, я получаю сообщение об ошибке в консоли браузера:
Failed to load resource: the server responded with a status of 400 ({"Answers[0].Answer":["The Answer field is required."]})
Любые идеи относительно того, что мне нужно для проверки кода?
Если вы используете ViewModel почему вы не используйте 'ValidationMessageFor',' TextBoxFor' и 'CheckBoxFor' помощники? Они будут генерировать правильную разметку для вас. –
Ознакомьтесь с моим обновленным ответом. – Dilip