В настоящее время я работаю над приложением ASP.NET MVC 3. Я строю экран с готовой проверкой. Позвольте мне прояснить ситуацию, используя следующий скриншот.
![enter image description here](https://i.stack.imgur.com/KYAp0.png)
Вы видите коллекцию TemplateItems. Второй столбец «Uitvoerder» обязателен. Это работает нормально в большинстве случаев.
Проблема, однако, в том, что это не обычный список элементов, а то, что он структурирован для представления иерархии, отображаемой в пользовательском интерфейсе. Следовательно, второй элемент является дочерним по отношению к первому и, следовательно, содержится в первом объекте TemplateItem, который вы видите.
Проверка не срабатывает для содержащихся элементов.
Вы можете утверждать, что внешняя модель должна быть плоской и менее сложной, но я бы хотел этого избежать. Есть ли способ, как я могу иметь триггер проверки для дочерних элементов?
Модель выглядит так:
public class WorkflowTemplateItemModel
: IValidatableObject
{
public WorkflowTemplateItemModel[] ChildWorkflowTemplateItems { get; set; }
public long? ExecutionParticipantId { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (ExecutionParticipantId == null)
{
yield return new ValidationResult("Contact needs to be specified",new[] {"ExecutionParticipantId"});
}
}
}
Соответствующая часть бритвы:
<td>
@Html.DropDownListFor(model => model.ExecutionParticipantId,
Model.AvailableUsers.Select(user => new SelectListItem
{
Text = user.UserName,
Value = user.Id.ToString(),
Selected = (Model.ExecutionParticipantId == user.Id)
}),
string.Empty
)
</td>
и бритва, из которой строится дерево:
@for (int i = 0; i < Model.ChildWorkflowTemplateItems.Length; i++)
{
@Html.EditorFor(model => model.ChildWorkflowTemplateItems[i], new { Depth = Depth + 1, ParentId = Model.WorkflowItemId, RootModel = GetViewData<CreateWorkflowModel> ("RootModel") })
}