代码之家  ›  专栏  ›  技术社区  ›  Randy Levy

如何在WCF和ASP.NET之间集成企业库验证应用程序块验证结果?

  •  2
  • Randy Levy  · 技术社区  · 16 年前

    企业库验证应用程序块(VAB)与ASP.NET以及WCF集成。

    是否有方法将在WCF中创建的validationresults与ASP.NET集成?

    例如,ASP.NET网页调用WCF服务。wcf服务使用vab验证数据,并通过faultcontract返回验证信息。ASP.NET页可以获取结果并显示一些错误消息。然而,一种常见的方法是指出哪些字段有错误(例如内联消息或星号)。这些方法中的大多数似乎都涉及到能够将验证结果与控件或验证程序相关联。

    我不认为有现成的解决方案,但也很好奇是否有人这样做,以及他们的方法是什么。

    1 回复  |  直到 16 年前
        1
  •  3
  •   Randy Levy    16 年前

    由于没有现成的解决方案,也没有发布任何答案,我将分享我实现的内容。我不喜欢这种方法,但它对我有用。

    概述

    基本方法是让ASP.NET页在DataContract对象的属性与正在验证的控件的clientID之间填充映射。出现验证错误时,作为faultcontract的一部分,clientID将从服务返回到ASP.NET页。然后从faultException中提取详细信息;ASP.NET页检索导致错误的控件的clientID,并可以采取适当的操作(例如,更改控件的外观或在验证器上设置文本)。

    细节

    所有DataContract对象都继承自公开字典的基类。此字典用于将对象属性映射到ASP.NET控件。在字典中,键是DataContract对象的属性名,值是控件的clientID。在调用服务之前,客户端必须将字典附加到DataContract对象。

    当企业库创建validationresult时,它包含一个名为target的属性,该属性是已验证的对象。validationresult还包含一个名为key的属性,该属性是已验证的目标对象的属性名。validationresult键也是在调用服务之前在ASP.NET页中设置的字典中的键。

    使用validationresult键,可以从validationresult目标提取ASP.NET提供的信息(clientID)。然后将信息添加为validationresult的标记。遗憾的是,标记是只读属性,因此必须通过创建新的validationresult并将标记传递给构造函数来设置它。

    然后,validationresults集合转换为我们需要使用的预先存在的customvalidationresults集合(看起来就像validationresult)。然后将CustomValidationResults添加到自定义ValidationFault,并引发FaultException。

    然后从ASP.NET页中的FaultException中提取validationFaults。validationFault包含与错误相关联的控件的clientID,因此页面可以选择在其认为合适的情况下显示消息。

    推荐文章