asp.net - 如何在 WCF 和 ASP.NET 之间集成企业库验证应用程序 block ValidationResults?

标签 asp.net wcf validation enterprise-library

企业库验证应用程序 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/

相关文章:

c# - 通过WCF服务上传超过50KB的文件失败

wcf - 在 Azure 上的 WCF 中通过 SSL 配置 webHTTP 和 NetHTTP 绑定(bind)

c# - 记录在映射到 TemplateContext.Database.SqlQuery 函数中的对象时重复

c# - 将 DataTable 绑定(bind)到 DetailsView 控件

windows - 需要一个循序渐进的 WCF 作为 Windows 服务

javascript - 我可以使用 JavaScript 调用 native HTML5 输入工具提示吗?

javascript - 将 PHP 函数更改为 Javascript/AJAX 验证

ASP.NET 成员(member)身份 以用户身份登录

c# - 日期时间转换失败

excel - 数据验证 - Excel 中没有重复项的下拉列表