【发布时间】:2011-09-07 14:31:33
【问题描述】:
我正要实现 IDataErrorInfo,当我看到 INotifyDataErrorInfo 是用于异步验证时。进一步挖掘时,我注意到使用这些接口的示例都在 ViewModel 上。我需要对模型进行验证,并且需要与模型一起存储的错误以保持持久性。我有一个包含许多实体的大图。该图需要传回服务器以进行复杂的验证。我不确定我现在应该使用什么方法。
我是否只是将我的接口实现移动到模型中?
我看到的另一个例子有一个单独的验证服务。就我而言,我的验证规则很复杂,我正在考虑使用 Windows Workflow 及其规则引擎来提高验证规则的可维护性。
我需要单独的验证服务吗?
验证完成后,必须将图表传回客户端。然后需要显示任何错误/警告。
我是否应该在模型中实现 INotifyDataErrors 并在验证返回到客户端时引发事件以将错误发布到视图(通过 ViewModel)?
事实证明,我无法在类库中引用包含 INotifyDataErrors 的程序集。它会在共享这些类的程序集中产生冲突。
【问题讨论】:
-
Silverlight 的全部意义在于提供一个富客户端。这通常意味着客户端上的第一级验证(除了服务器上的任何验证)。 RIA 服务允许共享自定义验证器(在客户端和服务器上运行),但您的数据模型可能过于复杂而无法使用 RIA。
-
@HiTech Magic,RIA 肯定出局了。我已经有一个类库和一个 Silverlight 类库共享类。我使用启用 Silverlight 的 WCF 服务将数据从服务器发送到客户端。我确实有一些客户端验证,但这还不够。图表必须返回服务器进行全面验证。
-
如果您的验证代码可用于客户端和服务器,您只需使用 RIA 服务项目的 .shared.cs 功能即可节省跨项目的链接文件。没有太多帮助,但比添加链接更简洁。
-
有些验证可以由客户端和服务器共享,有些不能。我将只为什么添加链接,而不是将项目切换到 RIA。
标签: silverlight validation asynchronous server-side