web-dev-qa-db-ja.com

ModelState検証を手動で呼び出す

ASP.NET MVC 3コードファーストを使用しており、検証データの注釈をモデルに追加しました。モデルの例を次に示します。

public class Product
{
    public int ProductId { get; set; }

    [Required(ErrorMessage = "Please enter a name")]
    public string Name { get; set; }

    [Required(ErrorMessage = "Please enter a description")]
    [DataType(DataType.MultilineText)]
    public string Description { get; set; }

    [Required(ErrorMessage = "Please provide a logo")]
    public string Logo { get; set; }
}

私のウェブサイトには、新しい製品を作成するためのマルチステッププロセスがあります。ステップ1では製品の詳細を入力し、ステップ2ではその他の情報などを入力します。ユーザーはプロセスのその段階に戻って、入力したデータを修正できます。

各画面には、新しいjQuery検証で正常に機能するクライアント側検証があります。

最終段階は確認画面です。その後、製品がデータベースに作成されます。ただし、ユーザーはステージ間をジャンプできるため、オブジェクト(製品およびその他のオブジェクト)を検証して、データが正しく完了したことを確認する必要があります。

データ注釈を持つオブジェクトでModelState検証をプログラムで呼び出す方法はありますか?オブジェクトの各プロパティを調べて手動で検証する必要はありません。

ASP.NET MVC 3のモデル検証機能を使いやすくする場合、このプロセスを改善する方法を提案します。

57
Sam Huggill

ValidateModelアクション内でControllerメソッドを呼び出すことができます( documentation here )。

73
Steve

コントローラースコープでValidateModelまたはTryValidateModelを使用できます。

モデルの検証中に、少なくとも1つのフォーム入力がモデルプロパティにバインドされている場合、すべてのプロパティのすべてのバリデーターが実行されます。 ValidateModelは、TryValidateModelメソッドがモデルの検証に失敗した場合にInvalidOperationException例外をスローしないことを除いて、TryValidateModelメソッドに似ています。

ValidateModel-モデルが有効でない場合、例外をスローします。

TryValidateModel-モデルが有効かどうかを示すブール値を返します。

モデルのリストを1つずつ検証する場合ModelState.Clear()を呼び出して、反復ごとにModelStateをリセットします。

MSDNへのリンク

45
Andrei

これが機能し、期待どおりに正確に動作することがわかりました。POSTの前に、GETアクションメソッドで新しく取得したオブジェクトのValidationSummaryを表示しています。

Me.TryValidateModel(MyCompany.OrderModel)
2
bkwdesign