0

私はウェブフォームアプリケーションを持っています。

クライアント側では、カスタム JavaScript 検証を使用してテキスト ボックスを強調表示し、テキストが変更されたときや送信ボタンがクリックされたときに検証メッセージを表示します。

サーバー側の検証は送信時に行われます。システムがフォームを保存するのを防ぐために、メッセージのリスト (文字列) を返します。

クライアント検証は一般的なもので、「必須フィールド」、「単語制限」のチェックなどがありますが、サーバー検証では、「既存の名前」、「テーブルに関連するレコードがある場合、ユーザーはオプション 'A' を指定する必要がある」などのデータ レコードを処理する必要があります。 B.」</p>

サーバー側の検証の欠点は、メッセージの概要を返すだけで、テキスト ボックスの横にメッセージを表示できないことです。(サーバー側はどのようにして各コントロール ID や各メッセージを表示する場所を知るのですか?)

各テキストボックスにメッセージを表示するために、サーバー側とクライアント側の検証はどのように連携しますか? .net の優れた設計またはアーキテクチャはありますか? 確かに、すべてのクライアント側の検証はサーバー側で複製されます。

どうも

4

2 に答える 2

2

IMO ASP.NETバリデーターは非常に優れており、サーバー側のバリデーターをで確認できますPage.IsValid

各コントロールのサーバー値をチェックせず、メッセージボックスなどを表示しない場合はCustomValidator、ajaxを使用してサーバー側のメソッドを使用および呼び出し、それを検証に使用できます。

サーバー側のashxハンドラーを呼び出してメールアドレスが有効かどうかを確認するJavaScript関数の例を次に示しCustomValidatorます。これは単なる例であり、ASP.NETがサーバー側を呼び出すために提供する他のメソッド(サービス、ページメソッドなど)を使用できます。

注:これはサーバー側の検証の代わりにはなりません。これは簡単に回避できるため、これも必要です。

function IsEmailValid(val, args) {

  var strUrl = "/SiteHandler.ashx?CheckEmail=" + args.Value;
  var strReturn = "";

  $.ajax({
           url: strUrl, 
           success: function (html) { strReturn = html; }, 
           async: false
         });

  args.IsValid = strReturn == "true";
}

その関数をカスタムバリデーターに設定します:

customValidator.ClientValidationFunction = "IsEmailValid";

ashxハンドラーのサーバー側:

public void ProcessRequest(HttpContext context)
{
  if (context.Request.Params["CheckEmail"] != null)
  {
    if (CallSomeCustomLogicAndReturnIsMailOK(context.Request.Params[CheckEmail]))
      context.Response.Write("true");
    else
      context.Response.Write("false");
  }
}
于 2012-04-24T10:07:09.557 に答える
1

良い解決策は、AJAXを使用してフォームを送信することです。利用可能な多くのライブラリの1つを使用するか、カスタムjavascriptソリューションを拡張して実装することができます。サーバーの検証が失敗した場合は、接続してクライアントの検証と同じメッセージを表示できます。どちらの場合も、メッセージは同じである必要があると言うのは正しいです。ユーザーは、検証がサーバー側で失敗したかクライアント側で失敗したかを気にしません。

于 2012-04-24T10:08:26.327 に答える