2016-04-07 18 views
1

私はWebフォームのアプリケーションを使用しており、ユーザーに無効な値を入力させたくありません。クライアント側だけでなくサーバ側の検証を強制するには?

現在、私はこのようなバリ-コントロールでこれを解決しています:

<asp:TextBox runat="server" ID="tbInsert"></asp:TextBox> 
<asp:RequiredFieldValidator runat="server" ControlToValidate="tbInsert" ID="rqtbInsert" 
    ErrorMessage="Required"> 
</asp:RequiredFieldValidator> 

をしかし、これは(ユーザーによって避けることができる)だけで、クライアント側の値を検証

私がしなければなりませんの各コントロールのサーバー側の検証を追加しますか?それは何をすべきか?

if (!string.IsNullOrEmpty(tbInsert.Text)) 
{ 
    //do sth. 
} 

答えて

5

バリデーターはクライアント側だけでなく、 CausesValidation=trueを持つすべてのコントロールは、サーバ側でPage.Validate()を起動させ、関連するすべてのバリデーション(ValidationGroupsが指定されている場合はすべて)バリデータを検証します。

クライアント側のチェックはオプションで、EnableClientScriptで有効/無効にできますが、サーバー側のチェックは常に行われ、Page.Validateメソッドでプログラムでトリガーすることもできます。

1

サーバー側では、Page.IsValidプロパティを使用してすべての検証コントロールが渡されたかどうかを確認し、ページ検証が成功したかどうかを示す値を返します。 MSDN Page.IsValid

private void ValidateBtn_Click(Object Sender, EventArgs E) 
{ 
    Page.Validate(); 
    if (Page.IsValid == true) 
     lblOutput.Text = "Page is Valid!"; 
    else 
     lblOutput.Text = "Some required fields are empty."; 
} 
0

各コントロールごとに検証を追加する代わりに、静的検証ヘルパークラスを追加し、モデルのすべての検証メソッドを同じクラスに書き込みます。 サーバ側の受信メソッドから検証するための各メソッドのみ。

このようにすれば、メソッドを過密にすることなく依存関係を守り、必要な動作を実現できます(メソッドエントリで1回だけ呼び出します)

関連する問題