2011-06-10 4 views
0

私のフォームにユーザー名フィールドがあり、サーバー側に[Invoke]呼び出しを行うことで非同期検証を使用して検証したいとします。フォームに2〜3つ以上のフィールドがあるとしたら、すべてがうまくいくと基本的にデータベースにユーザーを追加するsubmitメソッドがあります。検証は非同期であるため、ユーザーは他のフィールドを入力することができます。サーバーへの呼び出しが完了せず、応答が返される前にクライアントはフォームの記入を完了し、送信ボタンを押しますか?私は間違いを起こすことになっている。どのようにこれらのタイプのエラーを処理するのですか?送信ボタンを無効にする必要がありますか?はいの場合は、どうですか?私は、RIAの拡張メソッドで非同期のコール・ロジックをフックしていますので、同様にクライアント上の部分クラスにすなわち:このメソッドは、Entityクラスではなく、コード内の後ろにあるSilverlight 4で非同期検証が混乱する

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

。したがって、私はページの送信ボタンへの参照を取得し、それを無効にすることはできません。私はそれをどのように扱うのですか? 1つのオプションは、MVVMパターンを使用しているので、私はいつもレスキュークラスにMessengerクラスを持っています。 Messengerクラスが利用できなかった場合、他のオプションはありますか?私はあなたに私の質問があることを願っていますそうでない場合は、より良い方法で説明しようとしてください。事前に

感謝:)私は古いデバイスで行った同様のソリューションを実装

答えて

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

submiyをやってからユーザーを防ぐが、提出するときbusyindicatorまたは何か他のものを入れないでください。

関連する問題