2012-02-15 7 views
4

おはよう!ASP.NET MVCの検証で値の型を指定するにはどうすればいいですか?

私はJSONリクエストからバインドされたモデルは、次のように言ってきました:私はこのアクションに空のJSONオブジェクトを投稿すると{}

public ActionResult Submit(MyModel request) 
{ 
    if (ModelState.IsValid) 
    { 
     .. 
    } 
    else 
    { 
     .. 
    } 
} 

public class MyModel 
{ 
    public bool isSomeFeatureEnabled { get; set; } 
} 

そして、このようなコントローラ)isSomeFeatureEnabled=falseで有効になります。しかし、私はこのフィールドを常に必須の値(true \ false)に設定する必要があるという点で「必須」フィールドを必要とします。

私はこのフィールドをヌル入力にして、[Required]を置くことができますが、フィールドは実際にはモデルロジックごとにヌル入力可能ではありません。

int,doubleおよびDateTimeフィールドと同じ話です。

私は、ASP.NET MVC 3を使用して、デフォルトの設定の:

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = true 

が、それはこのような状況のために働くべきではないでしょうか。

答えて

2

私はこのフィールドをヌル可能にして、それをRequiredにすることが今のところベストショットだと思います。本の状態として、。そうでない場合は、独自の属性を記述し、渡されるとvalidateメソッドがfalseを返すようにすることができます。value = default(T)

2

JSONがサードパーティAPIから提供されており、それがどのように形成されているかに影響を与えないというアップデートがあれば、それはnullableが行く方法であるように見えます。

+0

申し訳ありませんが、私の質問はUIに関するものではありません。私の元の質問データがJSONリクエストから来ていると述べたので、空のリクエストは{}です( 'isSomeFeatureEnabled'はまったく指定されていません)。この場合、検証を強制したい。言い換えれば、私のJSONアクションのコンシューマー_は、このフィールドを 'false'でも指定する必要があります。 – artvolk

+0

JSONリクエストから何も得られない場合は、UIのデバッグを試して、値が設定されていない理由を確認しましたか?私はUIがなぜ、何が返されるのかを知ることが重要だと思います。たとえば、UIにバインドされているプロパティはどのようなコントロールですか?それがチェックボックスにバインドされている場合、チェックボックスは適切に初期化されていますか?モデルプロパティは、ビューに送信される前に初期化されていますか?なぜJSONリクエストで何も返ってこない理由がいくつかあります。あなたがUI上でアクセスや制御を全く受けていない場合、nullableが唯一の選択肢かもしれません。 – Nope

+0

これはJSON APIなので、UIはサードパーティアプリケーション/ウェブサイトにあります。私は元の質問でそれを明確に言及する必要があります。 nullableとRequired属性を使用する必要があります。 – artvolk

関連する問題