62

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

私の Web サイトでは、新しい製品を作成するための複数のステップ プロセスがあります。ステップ 1 では製品の詳細を入力し、ステップ 2 ではその他の情報などを入力します。各ステップの間に、各オブジェクト (製品オブジェクト) をセッションに保存しているので、ユーザーはプロセスのその段階に戻り、入力したデータを修正できます。

各画面で、クライアント側の検証が新しい jQuery 検証でうまく機能しています。

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

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

ASP.NET MVC 3 のモデル検証機能が使いやすくなるのであれば、このプロセスを改善する方法の提案を歓迎します。

4

4 に答える 4

74

ValidateModelアクション内でメソッドを呼び出すことができますController(ドキュメントはこちら)。

于 2011-06-15T15:42:37.757 に答える
52

ValidateModel と TryValidateModel

ValidateModelorTryValidateModelコントローラスコープで使用できます。

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

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

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

class ValueController : Controller
{
    public IActionResult Post(MyModel model)
    {
        if (!TryValidateModel(model))
        {
            // Do something
        }

        return Ok();
    }
}

モデルを 1 つずつ検証する

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

ドキュメントへのリンク

于 2013-11-15T07:21:36.010 に答える
2

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

Me.TryValidateModel(MyCompany.OrderModel)
于 2013-09-06T18:50:49.717 に答える