企业库验证应用程序 block (VAB) 与 ASP.NET 以及 WCF 集成。
有没有办法将 WCF 中创建的 ValidationResults 与 ASP.NET 集成?
例如ASP.NET 网页调用 WCF 服务。 WCF 服务使用VAB 验证数据并通过FaultContract 返回验证信息。 ASP.NET 页面可以获取结果并显示一些错误消息。然而,一种常见的方法是指示哪些字段有错误(例如内联消息或星号)。似乎大多数这些方法都涉及能够将验证结果与控件或验证器相关联。
我认为没有现成的解决方案,但也很好奇是否有人这样做过以及他们的方法是什么。
最佳答案
由于没有现成的解决方案,也没有发布任何答案,我将分享我实现的内容。我不喜欢这种方法,但它对我有用。
概述
ASP.NET 页面的基本方法是填充 DataContract 对象上的属性与正在验证的控件的 ClientId 之间的映射。当发生验证错误时,ClientId 会作为FaultContract 的一部分从服务返回到asp.net 页面。然后从FaultException中提取详细信息; ASP.NET 页面检索导致错误的控件的 ClientId,并可以采取适当的操作(例如更改控件的外观或在验证器上设置文本)。
详细信息
所有 DataContract 对象都继承自公开字典的基类。该字典用于将对象属性映射到 ASP.NET 控件。在字典中,键是 DataContract 对象上的属性名称,值是控件的 ClientId。在调用服务之前,客户端必须将 Dictionary 附加到 DataContract 对象。
当 Enterprise Library 创建 ValidationResult 时,它包含一个名为 Target 的属性,该属性是已验证的对象。 ValidationResult 还包含一个名为 key 的属性,它是已验证的目标对象的属性名称。 ValidationResult 键也是调用服务之前在 ASP.NET 页面中设置的字典的键。
使用 ValidationResult 键,可以从 ValidationResult 目标中提取 ASP.NET 提供的信息 (ClientId)。然后将该信息添加为 ValidationResult 的 Tag。不幸的是,Tag 是一个只读属性,因此必须通过创建新的 ValidationResult 并将标签传递给构造函数来设置它。
然后将 ValidationResults 集合转换为我们需要使用的预先存在的 CustomValidationResults 集合(看起来就像 ValidationResult)。然后,将 CustomValidationResults 添加到自定义 ValidationFault 中,并引发FaultException。
然后从 ASP.NET 页面中的FaultException 中提取ValidationFault。 ValidationFault 包含与错误关联的控件的 ClientId,以便页面可以选择显示它认为合适的消息。
关于asp.net - 如何在 WCF 和 ASP.NET 之间集成企业库验证应用程序 block ValidationResults?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1703423/