【问题标题】:Silverlight 4, RIA Services Multi-step Server Side ValidationSilverlight 4,RIA 服务多步骤服务器端验证
【发布时间】:2010-07-03 13:40:03
【问题描述】:

新手问题,我有一个简单的 Silverlight 4 客户端。我正在服务器端创建一些方法来处理新用户的创建/验证。在我创建用户之前,我想验证一些事情。用户名是否已经存在?电子邮件地址是否有效?密码是否通过严格检查?等等等等。

我并没有真正找到一种明确的方法来处理这个问题,我正在寻找一些建议。对于要检查的每个条件,我需要对服务器进行多次调用。所有调用都是异步的。在我看来,我可以做到以下几点:

  1. 调用服务器上的每个验证函数并使用等待来模拟同步调用。嗯。
  2. 尝试拼接所有各种回调函数完成的事件。嗯。
  3. 在服务器端将所有验证调用合并为一个。现在看起来很干净,但是当我想要执行不同的验证或不同的验证组合时会发生什么?这意味着更多的新功能。看起来这可能会成为今后的维护难题。

有没有一个优雅的解决方案让我回避?

谢谢。

【问题讨论】:

    标签: silverlight validation silverlight-4.0 wcf-ria-services


    【解决方案1】:

    您可以通过向生成的 .metadata 类中的属性添加属性来验证一些简单的事情(例如该字段是否适合某个正则表达式,或者密码是否足够长),如果您允许,域服务通常会生成这些属性。

    至于业务逻辑相关的事情(比如密码是否已经存在等),我个人会选择 1。

    这种方法确实没有什么问题……从长远来看,它似乎比您的第三种选择更易于维护。您只需要更改您在视图模型中调用的服务器端方法,而不是更改服务器端代码。也许在某些时候你会对某些类型的用户有不同的验证规则?你需要考虑一下。

    假设,您可以在服务器上使用反射并从客户端传递验证方法名称,并让服务器根据方法名称确定需要做什么。似乎是一个不错的选择,但可能比其他选项更复杂。

    编辑: 如果您想将异步调用转换为同步调用,最好使用以下内容:

    Context.Load(Context.GetUsersQuery()).Completed += (sender, args) =>
    {
       //Context.Load... next call
    };
    

    ,而不是等待任意数量的时间。

    【讨论】:

    • 感谢您的回答。您对如何执行模拟同步调用有什么建议吗?也许是示例代码?
    • 是的,我刚刚编辑了我的答案并添加了一些示例代码:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    相关资源
    最近更新 更多