使用AddModelError为子视图模型进行自定义验证

时间:2017-06-22 10:53:38

标签: c# asp.net asp.net-mvc validation asp.net-mvc-validation

我必须对子视图模型进行一些自定义验证,并使用ModelStateModelState.AddModelError()添加任何问题。但是我遇到了一个试图获取正确属性密钥的问题。

我的父视图模型包含N ChildViewModels,我正在验证子属性:

public class ParentViewModel {
    ...
    public List<ChildViewModel> Children = new List<ChildViewModel>();
}

public class ChildViewModel {
    public int Id { get; set; }
    ...
    public int PropertyToValidate { get; set; }
}

在视图中,我遍历ChildViewModel集合并显示每个集合的部分视图:

@foreach(var child in Model.Children)
    Html.RenderPartial("EditorTemplates/ChildViewModel", child);

这会导致每个子项的属性控件和验证占位符呈现如下,并带有唯一的Name前缀:

<input type="number" name="Children[83d5b826-f8f0-47fe-8985-c45debd1d846].PropertyToValidate">
<span class="field-validation-valid" data-valmsg-for="Children[83d5b826-f8f0-47fe-8985-c45debd1d846].PropertyToValidate" data-valmsg-replace="true"></span>

我的问题是,在添加到Children[83d5b826-f8f0-47fe-8985-c45debd1d846].PropertyToValidate时如何将ModelStateDictionary用作关键字?

在我的控制器中,我收集了无效的ChildViewModel,我尝试将它们添加到ModelStateDictionary,如下所示:

invalidChildViewModels.ForEach(x =>
    ModelState.AddModelError(
        ExpressionHelper.GetExpressionText(x),
        "My custom validation error message"));

但是这会导致添加一个空白键,因此验证消息不会显示。

0 个答案:

没有答案