我继承了一个大量使用Spring.NET的应用程序,包括验证。现在我正在试图弄清楚如何验证集合属性的子节点,所以给定这样的结构:
public class ParentObj
{
public virtual ICollection<ChildObj> Children { get; set; }
}
public class ChildObj
{
public virtual string SomeField { get; set; }
}
如何验证ParentObj.Children
不为空且包含多于0个元素,然后验证每个ChildObj.SomeField
的长度是否少于100个字符?我正在阅读文档,但我发现很难理解这个概念,因为没有像我这样的特定场景,这与上面的不同 - 但是有关春天如何验证集合的一些指导将会受到赞赏。
现在我正在尝试使用以下(基于xml)配置:
<v:group id="ParentObjValidator">
<v:ref name="ChildObjValidator" />
<v:condition test="Children != null and Children.Count > 0">
<!-- message part -->
</v:condition>
</v:group>
<v:group id="ChildObjValidator">
<v:condition test="SomeField.Length <= 100" when="!string.IsNullOrEmpty(SomeField)">
<!-- message part -->
</v:condition>
</v:group>
好的,我现在到了某个地方(thanks to this),并将我的配置修改为:
<v:group id="ParentObjValidator">
<v:collection context="Children" when="Children != null and Children.Count > 0">
<v:ref name="ChildObjValidator" />
<!-- message part -->
</v:collection>
</v:group>
<v:group id="ChildObjValidator">
<v:condition test="SomeField.Length <= 100" when="!string.IsNullOrEmpty(SomeField)">
<!-- message part -->
</v:condition>
</v:group>
现在它似乎很满意......然而,我的预期失败并没有被提起,所以我不确定这些孩子是否真的被证实(或者我的规则是错误的)。
答案 0 :(得分:0)
知道了!我错过了集合类型的include-element-errors="true"
属性:
<v:group id="ParentObjValidator">
<v:collection context="Children" when="Children != null and Children.Count > 0" include-element-errors="true">
<v:ref name="ChildObjValidator" />
<!-- message part -->
</v:collection>
</v:group>
<v:group id="ChildObjValidator">
<v:condition test="SomeField.Length <= 100" when="!string.IsNullOrEmpty(SomeField)">
<!-- message part -->
</v:condition>
</v:group>
现在似乎正在运行。