MVC3服务器端验证,检查部分类中属性的有效性

时间:2014-03-17 16:15:48

标签: c# asp.net-mvc asp.net-mvc-3 validation server-side-validation

我有一个模型,因为它的一个属性有一个子模型列表。在我看来,每个子模型都使用自定义客户端验证单独验证。正确验证所有内容,并显示正确的验证消息。

唯一的一点是,我一次在屏幕上有很多这些儿童模特和编辑,并且需要让无效的编辑器更加突出,例如给周围的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>

1 个答案:

答案 0 :(得分:0)

您可以尝试使用以下方法测试模型中的特定字段

Html.ViewData.ModelState.IsValidField("Child_Id")

它会返回给定字段是否有效,我不确定你如何进入集合,我以前没有以这种方式使用它。