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

问题描述 投票:0回答:1

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

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

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

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

c# silverlight-4.0 wcf-ria-services
1个回答
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...
    }

提交时,请勿阻止用户进行修改,而请放置繁忙的指示符或其他内容。

© www.soinside.com 2019 - 2024. All rights reserved.