2012-01-19 7 views
2

はのは、私は行動後に観察モデルASP.NET MVC - int型のモデルの検証及び日時

 public class Model 
    { 
     public int Number { get; set; } 
     public DateTime Date { get; set; } 
    } 

てみましょう。 ModelState.IsValidの値がtrueであるものは何も送信されないとき、Numberプロパティは値0を持ち、Dateは1.1 0001 00:00:00です。私は無効なモデルを設定し、適切な生成する必要がありRequiredAttributeと検証ルーチンを設定して取得する必要NumberプロパティとDateTimeプロパティその後、この権利を理解していれば

DataAnnotationsModelValidatorProviderクラスとGetValidators方法は、コード

 // Add an implied [Required] attribute for any non-nullable value type, 
     // unless they've configured us not to do that. 
     if (AddImplicitRequiredAttributeForValueTypes && 
       metadata.IsRequired && 
       !attributes.Any(a => a is RequiredAttribute)) { 
      attributes = attributes.Concat(new[] { new RequiredAttribute() }); 
     } 

のこのpiecoを持っています エラーメッセージ。

私の質問はなぜモデルを無効にするのですか?

私は、ASP.NET MVC 3

答えて

5

だから私の質問は、なぜモデルが無効ins'tされ使用していますか?

0は完全に有効な整数であると1.1 0001 00:00:00は完全に有効な日時ですので。なぜあなたのモデルが無効であると思うのかわかりません。

は、EMがNULL可能で作成し、所望の効果を達成するために必要な属性を飾る:値がフォームから送信されなかったbecauceモデルは無効である必要があり

public class Model 
{ 
    [Required] 
    public int? Number { get; set; } 

    [Required] 
    public DateTime? Date { get; set; } 
} 
+0

を。これらの値は入力値ではありません。だから、必要なルールは壊れていた。必要な値にnull可能な型を使用すると、間違っているようです。まず、nullでないintは、必要な属性がなくても必要なように振る舞います。 nullable intは、必要でない値のように振る舞います。 – user49126

+0

@ user49126、 'int'や' DateTime'のようにヌル値を持たない型に*値を*格納することはできません。 CLRは、あなたがどんなに頑張ってもあなたに許されません。それが動作する仕組みは、デフォルトのモデルバインダーがモデルをインスタンス化することです(もちろん、すべてのプロパティはデフォルト値に割り当てられていますが、値の型がそれぞれデフォルトになります)。 2つのプロパティは完全に有効な値を内部に持つので、検証エラーはなく、完全に意味があります。 –

+0

私は知っているが、少なくともモデルは無効でなければならない。 – user49126