我有一个模型,因为它的一个属性有一个子模型列表。在我看来,每个子模型都使用自定义客户端验证单独验证。正确验证所有内容,并显示正确的验证消息。
唯一的一点是,我一次在屏幕上有很多这些儿童模特和编辑,并且需要让无效的编辑器更加突出,例如给周围的div一个红色轮廓(不仅仅是输入为默认值。
因此,我需要在其partials视图中检测子模型的有效性,并将相应的CSS类附加到div。我已经在几个地方读过这可以用Html.ViewData.ModelState.IsValid
完成,但这似乎可以了解ParentModel和所有ChildModel是否有效。
以下是我的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>
答案 0 :(得分:0)
您可以尝试使用以下方法测试模型中的特定字段
Html.ViewData.ModelState.IsValidField("Child_Id")
它会返回给定字段是否有效,我不确定你如何进入集合,我以前没有以这种方式使用它。