0

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

唯一的问题是,我一次在屏幕上有很多这些子模型和编辑器,并且需要通过例如给周围的 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>
4

1 回答 1

0

您可以尝试使用以下内容来测试模型中的特定字段

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

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

于 2014-03-17T17:11:52.663 回答