2017-04-12 22 views
-1

MVC 5アプリ....モデルの検証 - にModelStateが無効

私は多くの分野でモデルを持っている...それらの2がある.​​..(これはモデルです)

する原因eventDateStartedとeventDateCompletedフィールドがnullではないされていない限り、
public string eventStatus {get; set;} 
public DateTime? eventDateStarted {get; set;} 
public DateTime? eventDateCompleted {get; set;} 

私は何をしたいeventStatusは、「クローズ」に設定することはできません。そうであれば、無効なModelStateになります。

ここにはプログラミングルールが含まれていますが、これはビジネスルールに基づいてさらに高度化する可能性があります。したがって、このフィールドが設定されるためには、このフィールドが必要であるということだけではありません。

私は、このロジックを配置する最適な場所がeventStatusの設定メソッドにあると考えていました。これはベストプラクティスの解決策ですか?もしそうなら、どうすればModelStateを無効にすることができますか?

これは私がこれまで書いてきたものを...

[Display(Name = "Status")] 
    public string eventStatus 
    { 
     set 
     { 
      if (EventActualEnd is null || EventActualStart is null) 
      { 
       ModelState.AddModelError("Status", "Start and End date is mandatory"); 
      } 
     } 
    } 

である。しかし、それはAddModelErrorが好きではありません。

+0

[別のフィールドに依存する属性]の可能な複製(http://stackoverflow.com/questions/3713281/attribute-dependent-on-another-field) –

+0

条件付き検証属性を作成します。良いガイドについては、[ASP.NET MVC 3での検証の完全ガイド - 第2部](http://www.devtrends.co.uk/blog/the-complete-guide-to-validation-in-asp)を参照してください。 .net-mvc-3-part-2) –

答えて

1

AuditStatusIdのコードがどこに座っているのかわかりませんが、モデル内にあるように見えます。 ModelStateはコントローラのプロパティであり、System.Web.Mvc.Controllerを継承するクラスからのみアクセスできます。

外部ライブラリは実行可能なオプションですか?もしそうなら、私はNuGetを介して利用可能なMVC Foolproofをチェックアウトします。複雑なモデルのデータ注釈を組み込むことができます。注釈は、必要とするものを正確に達成します。さまざまな状況に基づいてカスタム検証を設定し、独自の検証を作成することができます。

これは可能ではないが、デフォルトでは、MVCは検証のためにモデルの組み込みデータ注釈にある程度制限されている。独自に拡張する必要があります。コントローラのロジックでは、通常はModelState.IsValidのサーバー側をチェックし、現在のモデル変数をチェックし、論理パスをオンまたはオフにするロジックを追加します。 ModelState.IsValidを手作業で行います。このようにあまり複雑ではないチェックでは、コードはごくわずかなはずです。複数の場所で実行する必要がある場合は、ユーティリティクラスに分割してモデルを渡し、そこで検証して戻ります検証のために真か偽かこれもサーバー側だけです。アプリケーションの構築方法に基づいてクライアント側の検証が必要な場合は、クライアント側で同様の魔法を実行する必要があります。

+0

ありがとうございました。はい、モデルのコード(setメソッド)でした。私は上でそれを編集した。これは私自身のアプリなので、Foolproofの高度なアノテーションを使うことができます。あなたの提案をありがとう。 – WebDevGuy2

関連する問題