Проверка ASP.NET MVC дочерних элементов - PullRequest
2 голосов
/ 14 марта 2012

В настоящее время я работаю над приложением ASP.NET MVC 3. Я строю экран с готовой проверкой. Позвольте мне прояснить ситуацию, используя следующий скриншот.

enter image description here

Вы видите коллекцию 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") })
}

1 Ответ

0 голосов
/ 14 марта 2012

Вы можете сделать это, но вам нужно будет создать пользовательскую проверку, включая код проверки на стороне клиента.

Процесс похож на этот: http://haacked.com/archive/2009/11/18/aspnetmvc2-custom-validation.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...