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

本文关键字:验证 异步 Silverlight | 更新日期: 2023-09-27 17:58:53

假设我的表单上有一个用户名字段,我想通过服务器端[Invoke]调用使用异步验证来验证它。假设我在表单中还有2-3个字段,然后我有一个提交方法,如果一切顺利,它基本上会在数据库中添加用户。现在,由于验证是异步的,用户仍然可以输入其他字段,如果对服务器的调用没有完成,并且在返回响应之前,客户端完成了表单填写并点击了提交按钮,该怎么办?我肯定会出错。

如何处理这些类型的错误?我应该禁用"提交"按钮吗?如果是,那么怎么做?因为我在RIA扩展方法中连接异步调用逻辑,即在客户端上的分部类中,如:

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

此方法在Entity类中,而不在代码隐藏中。因此,我无法在页面上获得提交按钮的引用并将其禁用。我该如何处理?一个选项是,当我使用MVVM模式时,我总是有Messenger类来拯救它,通过它我可以禁用它。如果Messenger类不可用,还有其他选项吗?

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

当我实现类似的解决方案时,我使用旧设备;

客户端验证很好,但服务器端验证才是最重要的。

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...
    }

不要阻止用户进行submiy,而是在提交时设置busyinger或其他东西。