はのは、私は行動後に観察モデル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
を。これらの値は入力値ではありません。だから、必要なルールは壊れていた。必要な値にnull可能な型を使用すると、間違っているようです。まず、nullでないintは、必要な属性がなくても必要なように振る舞います。 nullable intは、必要でない値のように振る舞います。 – user49126
@ user49126、 'int'や' DateTime'のようにヌル値を持たない型に*値を*格納することはできません。 CLRは、あなたがどんなに頑張ってもあなたに許されません。それが動作する仕組みは、デフォルトのモデルバインダーがモデルをインスタンス化することです(もちろん、すべてのプロパティはデフォルト値に割り当てられていますが、値の型がそれぞれデフォルトになります)。 2つのプロパティは完全に有効な値を内部に持つので、検証エラーはなく、完全に意味があります。 –
私は知っているが、少なくともモデルは無効でなければならない。 – user49126