2
我目前正在研究ASP.NET MVC 3应用程序。我正在建立一个开箱即用的验证屏幕。请允许我使用以下屏幕截图来说明情况。验证ASP.NET MVC子元素
上面你看到TemplateItems的集合。第二列'Uitvoerder'是必需的。这在大多数情况下工作正常。
但问题是,它不是一个常规项目列表,而是它的结构表示层次结构显示在UI中。因此,第二项是第一项的子项,因此包含在您看到的第一个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 2012-03-14 14:58:57