MVC3服务器端验证,检查部分类中属性的有效性
本文关键字:属性 有效性 分类 检查部 服务器端 验证 MVC3 | 更新日期: 2023-09-27 17:50:35
我有一个模型,它的一个属性有一个子模型列表。在我看来,每个子模型都是使用自定义客户端验证单独验证的。一切都得到了正确的验证,并显示了正确的验证消息。
唯一的问题是,我在屏幕上一次有很多这样的子模型和编辑器,并且需要使无效的编辑器更加突出,例如通过给周围的div一个红色轮廓(而不仅仅是默认的输入)。
所以我需要检测其子模型在其局部视图中的有效性,并将适当的CSS类附加到div。我在几个地方读过,这可以用Html.ViewData.ModelState.IsValid
完成,但这似乎与ParentModel和所有的ChildModels是否有效有关。
这里是一个例子,我的ParentModel, ChildModel, View的父,和部分视图的ChildModels:
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>
您可以尝试使用以下代码来测试模型中的特定字段
Html.ViewData.ModelState.IsValidField("Child_Id")
它将返回给定字段是否有效,我不确定您如何在集合内进行,我以前没有以这种方式使用过它。