私は現在、ASP.NET MVC 3アプリケーションを開発中です。私はすぐに使用できる検証機能を備えた画面を構築しています。次のスクリーンショットを使用して状況を明確にすることができます。あなたの上検証ASP.NET MVC子要素
は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") })
}
は、定義された属性とのViewModelクラス/クラスのコードを確認する必要があります – reach4thelasers