1

Webアプリに検証を実装しています...問題は、検証が過剰になっているように見えることです。

コントローラコードは次のようになります。

[HttpPost]
[Authentication]
public ActionResult Create([Bind(Exclude = "Id")] CaseInfo caseInfo)
{
    if (!ModelState.IsValid)
    {
        SetupViewData();
        return View();
    }

    _repository.Create(caseInfo);
    return RedirectToAction("List");
}

これはCaseInfoの実装です。

public class CaseInfo :IValidatableObject
{   
    public virtual Guid Id { get; set; }
    public virtual DateTime ReferralDate { get; set; }
    public virtual int Decision { get; set; }
    public virtual string Reason { get; set; }
    public virtual DateTime StartDate { get; set; }
    public virtual DateTime EndDate { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        throw new NotImplementedException();
    }
}

そして私のCaseInfoMap:

public sealed class CaseInfoMap : ClassMap<CaseInfo>
{
    public CaseInfoMap()
    {
        Id(x => x.Id).Not.Nullable();
        Map(x => x.ReferralDate);
        Map(x => x.Decision);
        Map(x => x.Reason);
        Map(x => x.StartDate);
        Map(x => x.EndDate);
    }
}

しかし、それを実行して値なしでフォームを送信すると、次の検証エラーが発生します。

# The ReferralDate field is required.
# The StartDate field is required.
# The EndDate field is required.

しかし、私はこれらが必要であるべきだと指定していませんか?!! そして、なぜ決定フィールドと理由フィールドが同様の検証エラーをスローしないのですか?

誰かがこれに光を当てることができますか?

.NET4とMVC2を使用しています。

4

2 に答える 2

3

これを変更してもらえますか:

public virtual DateTime ReferralDate { get; set; } 

public virtual DateTime? ReferralDate { get; set; } 

DateTimeにはnull許容型を使用する必要があります。

他のすべての日付について同じことをしたい場合は、それらを変更してください。

public class CaseInfo :IValidatableObject {        
    public virtual Guid Id { get; set; }     
    public virtual DateTime? ReferralDate { get; set; }     
    public virtual int Decision { get; set; } 
    public virtual string Reason { get; set; }     
    public virtual DateTime? StartDate { get; set; }     
    public virtual DateTime? EndDate { get; set; }      
    public IEnumerable<ValidationResult>

Validate(ValidationContextvalidationContext){throw new NotImplementedException();}}

日時に関するMSDNドキュメントを確認してください:http://msdn.microsoft.com/en-us/library/system.datetime(v = VS.90).aspx

値にはnullを含まない範囲があるため、バリデーターは失敗します。日時null許容型を使用することをお勧めします。

于 2011-02-11T16:15:05.997 に答える
2

DateTime構造体はnull許容ではないため、事実上必須です。null許容の場合は、 Nullable<DateTime>[または省略形]を使用する必要があります。DateTime?

于 2011-02-11T16:14:09.680 に答える