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

问题描述

| 假设我的表单上有一个用户名字段,我想通过进行服务器端“ 0”调用来使用异步验证进行验证。考虑我在表单中还有2-3个字段,然后我有一个Submit方法,如果一切顺利的话,它将基本上将用户添加数据库中。现在,由于验证是异步的,因此用户仍然可以输入其他字段,并且如果未完成对服务器的调用,并且在返回响应之前,客户端将填写表单并单击“提交”按钮,该怎么办?我一定会出错。如何处理这些类型的错误?我应该禁用“提交”按钮吗?如果是,那怎么办?因为我在RIA扩展方法中挂接了异步调用逻辑,即在客户端的部分类中:
public void OnUsernameChanging()
{
    //make service call and handle it..
}
方法在Entity类中,而不在后面的代码中。因此,我无法获得页面上的提交按钮的引用并禁用它。我该如何处理?一种选择是,当我使用MVVM模式时,我总是可以使用Messenger类进行救援,并且可以通过它禁用它。如果Messenger类不可用,还有其他选择吗?希望你能回答我的问题。如果没有,请告诉我,我将尝试以更好的方式进行解释。 提前致谢 :)     

解决方法

        当我实施类似的解决方案时,我选择了旧设备。   客户端验证很不错,但是服务器端验证才是最重要的。 IE异步客户端验证用于显示目的,真正的验证应该在实体元类中,或者如果更具体地定义在服务的相关“ 2”和“ 3”方法中。下面的简单示例:
    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...
    }
提交时,请不要阻止用户进行修改,而要放置忙碌指示符或其他内容。