2012-03-14 71 views
2

我目前正在研究ASP.NET MVC 3應用程序。我正在建立一個開箱即用的驗證屏幕。請允許我使用以下屏幕截圖來說明情況。驗證ASP.NET MVC子元素

enter image description here

上面你看到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") }) 
} 
+0

需要查看ViewModel類/類的代碼與定義的屬性 – reach4thelasers 2012-03-14 14:58:57

回答