对Silverlight 4中的异步验证感到困惑

时间:2011-06-10 02:42:09

标签: c# silverlight-4.0 wcf-ria-services

假设我的表单上有一个用户名字段,我想通过进行服务器端[Invoke]调用来使用异步验证来验证它。考虑我在表单中还有2-3个字段,然后我有一个提交方法,如果一切顺利的话,基本上会将用户添加到数据库中。现在因为验证是异步的,用户仍然可以输入其他字段,如果对服务器的调用没有完成,并且在返回响应之前客户端完成填写表单并点击提交按钮怎么办?我一定会收到错误。我该如何处理这些类型的错误?我应该禁用提交按钮吗?如果是,那怎么样?因为我在RIA扩展方法中连接异步调用逻辑,即在客户端上的部分类中,如:

public void OnUsernameChanging()
{
    //make service call and handle it..
}

此方法位于Entity类中,而不是代码隐藏。因此,我无法获得对页面上的提交按钮的引用并禁用它。我该如何处理?一个选择是因为我使用MVVM模式,我总是有Messenger类来救援,通过它我可以禁用它。如果Messenger类不可用,还有其他选项吗?我希望你能得到我的问题。如果没有,请告诉我将尝试以更好的方式解释。

提前致谢:)

1 个答案:

答案 0 :(得分:0)

当我实施类似的解决方案时,我去了旧设备;

  

它非常适合客户端验证,但服务器端验证是重要的。

IE异步客户端验证用于显示目的,真正的验证应该在实体元类中,或者在服务的相关[update][insert]方法中更具体。以下简单示例:

    if (!IsValidExampleEntity(entityToAddOrUpdate)) {
      var result = new ValidationResult(
         "A nice message", 
         new string[]{"the", "entity", "properties", "in", "error","as", "ienumerable<string>"});
      throw new ValidationException(result, null, entityToAddOrUpdate);
    } else {
      // Store it or whatnot...
    }

不要阻止用户进行下属,但在提交时会设置busyindicator或其他东西。