ASP.NET MVCを使用してフィールド検証を実装する最良の方法は何ですか?

StackOverflow https://stackoverflow.com/questions/16747

  •  08-06-2019
  •  | 
  •  

質問

ASP.NET を使用して公開 Web サイトを構築しています。成果物の一部として、公開サイトに表示されるデータを入力するための管理サイトを作成する必要があります。ASP を使用してエントリを検証するために、どのような技術や手順が使用されているのか疑問に思っていました。 .NET MVC。

役に立ちましたか?

解決

を見てください。 JQuery検証プラグイン このプラグインは素晴らしく、実装が簡単で、AJAX によるリモート検証など、必要な機能がすべて備わっています。

サンプル MVC コントローラー メソッドも見つかります。 ここ これは基本的に次のような JsonResult アクション タイプを使用します。

public JsonResult CheckUserName(string username)
{
    return Json(CheckValidUsername(username));
}

他のヒント

@Chuck - ASP.NET MVCではまだAjaxToolKitコントロールを使用できません。これらは ASP.NET ページ ポストバック モデルでのみ機能します。

アップデート:

2008 年 8 月 20 日の時点では、ASP.NET MVC フレームワーク内で Ajax コントロール ツールキットのスクリプト ファイルのみを使用できます。ここにリンクがあります リリース.

また、 ここにチュートリアルがあります これらを使用してポップアップ カレンダーを作成する方法について、Stephen Walther 氏が執筆しました。

このスレッドを読んでいる人全員に正しい情報が提供されるようにしたいだけです。

IMO では、xVal と jQuery および DataAnnotationsModelBinder を使用することが最良の組み合わせです。

ただし、場合によっては、クライアント側で完全にチェックできない検証ルールがあるため、リモートのクライアント側検証を使用する必要があります。

xVal / jQuery.validate を使用してリモートのクライアント側検証を一般的に実装する方法を考え出しました。

  • 検証ルールは ASP.NET MVC モデル内にのみ残ります
  • 各検証ルールは 1 回だけ記述し、簡単にテストできる C# コードでのみ記述します。JavaScript やその他のクライアント側に対応するものはありません。
  • xVal や jquery.validate を分岐したり変更したりする必要はありません。
  • 新しいリモート フォーム検証ルールごとに行う必要があるのは、この記事で示した基本クラスから派生することだけです。

私は、 ブログ記事 これについてはすべての詳細を説明します。

を使うのが好きです ライブ検証 ASP.NET MVC アプリ内のライブラリ。これにより、クライアントとサーバーで検証を行う方法をセットアップすることができました。そうすることで、ユーザーはフォームを送信する前に何かが間違っていることに気づき、その他の例外的なケースに対してサーバー側の機能を使用できるようになります。

私は、同様の設定をセットアップする方法について非常に優れた仕事をするこの投稿から始めました。

ASP.NET MVCのモデルベースのクライアント側検証

私のやり方:

私は、プレビュー 4 リリースに同梱されているアカウント コントローラーに示されている例に従っています。フィールドはコントローラーでチェックされ、エラーが発生した場合は、文字列エラーの配列が集約され、後で開始した同じビューに表示されます。リクエスト。

私もその考えに従ってきました スティーブン・ワルサーの MVC について で思うんですけど この郵便受け 再送信する前に、送信されたデータをフィールドに再入力して変更できるようにすると便利です。

皆さんは何を使っていますか?

AjaxToolKit で提供されるコントロールを見たことがありますか?私は MaskedEditExtender と ValidatorCalloutExtender を使用しましたが、その結果に非常に満足しています。

@Dale - それについて修正してくれてありがとう!それは知りませんでした(先週ツールキットを使い始めたばかりです)。私の提案は無視してください:)

@ザック:はい、私もその投稿を読みました。その投稿に基づいて、SO は JavaScript ライブラリとして jQuery を使用しています。私は SO チームのことを代弁することはできませんが、私の知識に基づいた推測では、おそらく彼らは jquery 内の ajax 機能を使用して ajax リクエストを処理しているのではないかと思います。実際、次のような JavaScript ライブラリを使用する場合、手動でコーディングするのはそれほど悪くありません。 jQuery, プロトタイプ, 、 そして ムーツール. 。次に、アクションに新しい JsonResult ActionResult 戻り値を使用し、それらに対して ajax リクエストを作成します。これらのライブラリは XmlHttpRequest オブジェクトをカプセル化し、Ajax 呼び出しとブラウザーを簡単に安全にします。

使用できます .net検証フレームワーク クライアント/サーバー側の両方の検証が必要な場合は、codeplex で。モデルで定義されたルールに基づいて、jQuery 検証プラグインのコードを生成します。さらに、フレームワークの「高度な」機能を使用する場合は、jQuery 検証プラグインの設定を手動で制御できます。チェックアウトしてください MVC クイックスタート.

クライアント側検証とサーバー側検証のハイブリッドを使用します。

クライアント側の検証については、で説明されているアプローチを使用します。 ダニエル・ポラードによる回答 健全なようです。クライアント側の検証は必須ではありませんが、より優れた応答性の高いエクスペリエンスをユーザーに提供します。

一方、サーバー側の検証は必須である必要があります。クライアントからの入力を決して信用しないでください。私は、プレビュー 5 の ASP.NET MVC フレームワークによって提供される機能を間違いなく検討します (「 マット・ヒンゼによる回答),

私のお気に入りの方法は、モデルベースの属性を使用してクライアントとサーバーの両方の検証を実行する方法です。これについて短い記事を書き、ソース コードもリリースしました。これにより、基本的に次のようなクラスを作成できるようになります。



class User {

    [Required]
    public string Name{get;set;}

    [Email][Required]
    public string Email {get;set;}
}

また、クライアント検証を実行するための適切な JavaScript コードが生成され、サーバー側検証ランナーが送信されたフォームを検証します。

投稿を読み返してください ここ

@チャック - 心配ない。それがSOの目的です。あなたも何かを学び、質問した人も何かを学びます。

AJAX はスタック オーバーフローでどのように処理されますか?JQueryはそれをやりますか?

  • ページ上で右クリックします
  • ポップアップメニューで「ページソースの表示」を探します。
  • クリックして

:-)

すぐに使える機能を使い続けたいが、それを拡張する必要がある場合は、以下を参照してください。 私の答えはここにあります IDataError に関する質問へ。

基本的に、より複雑なロジックにはデータ アノテーションとモデルバインダーを使用します。これは非常にクリーンな方法であり、MS が提供する範囲内にとどまることができることがわかりました。

モデルバインダーを使用して、モデルの「クラスレベル」チェックを追加する方法を説明します。 IDataError - ここで見てきたように、これは非常に不器用な場合があります。[必須] 属性やその他のカスタム検証属性を引き続き使用できますが、個々のモデル エラーを追加または削除できます。データ注釈の使用方法の詳細については、強くお勧めします Scott Gu からのこの投稿.

ASP.NET MVC で検証を実装する方法の 1 つは、クライアント側の検証とともにデータ注釈を使用することです。これ 記事 エンティティ フレームワークで生成されたモデル クラスに対してそれを行う方法を示します。

デール・ラガン 書きました:

ASP.NET MVC では AjaxToolKit コントロールを使用できません

AJAX はスタック オーバーフローでどのように処理されますか?JQueryはそれをやりますか?彼のコーディングホラー投稿では JavaScript 忍者の秘密 Jeff は、Stack Overflow を作成する際に JQuery の使用について書きました。

確かに彼らは手作業でコーディングしたわけではありません。2005 年頃に「AJAX」という用語が普及したときに、すべての XMLHttpRequest JavaScript でこれを一度実行しました。それは悪夢だった。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top