我必须对子视图模型进行一些自定义验证,并使用ModelState
向ModelState.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"));
但是这会导致添加一个空白键,因此验证消息不会显示。