2012-03-14 20 views
2

私は現在、ASP.NET MVC 3アプリケーションを開発中です。私はすぐに使用できる検証機能を備えた画面を構築しています。次のスクリーンショットを使用して状況を明確にすることができます。あなたの上検証ASP.NET MVC子要素

enter image description here

はTemplateItemsのコレクションを参照してください。 2番目の列 'Uitvoerder'が必要です。ほとんどの場合、これは問題なく動作します。

ただし、問題は通常のアイテムリストではなく、UIに表示される階層を表すように構成されていることです。したがって、2番目のアイテムは1番目のアイテムの子であり、したがって、最初に表示される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") }) 
} 
+0

は、定義された属性とのViewModelクラス/クラスのコードを確認する必要があります – reach4thelasers

答えて