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