我有一个模型,它的属性之一有一个子模型列表。在我看来,每个子模型都使用自定义客户端验证单独验证。一切都被正确验证,并且正在显示正确的验证消息。
唯一的问题是,我一次在屏幕上有很多这些子模型和编辑器,并且需要通过例如给周围的 div 一个红色轮廓(不仅仅是输入为是默认值)。
所以我需要在它们的局部视图中检测子模型的有效性,并将适当的 CSS 类附加到 div 中。我已经在几个地方读到可以做到这一点,Html.ViewData.ModelState.IsValid
但这似乎与 ParentModel 和所有 ChildModels 是否有效有关。
这是我的 ParentModel、ChildModel、父视图和 ChildModel 的部分视图的示例:
public class ChildModel
{
public Guid Child_Id { get; set; }
public List<Guid> Selected_Ids { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
List<ValidationResult> Errors = new List<ValidationResult>();
if (this.Selected_Ids == null || !this.Selected_Ids.Any())
{
Errors.Add(new ValidationResult("You must select at least one id.", new List<string> { "Selected_Ids" }));
}
return Errors;
}
}
public class ParentModel
{
public Guid Parent_Id { get; set; }
public List<ChildModel> Children { get; set; }
public List<Guid> Available_Ids { get; set; }
}
@* View *@
@model ParentModel
<div>
@using(Html.BeginForm())
{
@Html.HiddenFor(m => m.Parent_Id)
@Html.EditorFor(m => m.Children, new { Model.Available_Ids })
<button type="submit">Save</button>
}
</div>
@* Partial View / Editor Template *@
@model ChildModel
@ {
List<Guid> Available_Ids = (List<Guid>)ViewData["Available_Ids"];
}
<div class='child_model @(Html.ViewData.ModelState.IsValid ? string.Empty : "Invalid")'>
@Html.HiddenFor(m => m.Child_Id)
@foreach(Guid Available_Id in Available_Ids)
{
@Html.CheckBoxFor(m => m.Selected_Ids, Available_Id.ToString())
}
</div>