31

モデルには次の 2 つのフィールドがあります。

[Required(ErrorMessage="The start date is required")]
[Display(Name="Start Date")]
[DisplayFormat(DataFormatString = "{0,d}")]
public DateTime startDate { get; set; }

[Required(ErrorMessage="The end date is required")]
[Display(Name="End Date")]
[DisplayFormat(DataFormatString = "{0,d}")]
public DateTime endDate{ get; set; }

より大きくなけれendDateばなりませんstartDate。使用してみ[Compare("startDate")]ましたが、これは同等の操作でしか機能しません。

「より大きい」操作には何を使用すればよいですか?

4

3 に答える 3

63

Fluent ValidationまたはMVC Foolproof Validationをご覧ください。これらは非常に役立ちます。

たとえば、フールプルーフには、[GreaterThan("StartDate")]日付プロパティで使用できる注釈があります。

または、他のライブラリを使用したくない場合はIValidatableObject、モデルに実装することで独自のカスタム検証を実装できます。

public class ViewModel: IValidatableObject
{
    [Required]
    public DateTime StartDate { get; set; }
    [Required]    
    public DateTime EndDate { get; set; } 

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
       if (EndDate < StartDate)
       {
           yield return new ValidationResult(
               errorMessage: "EndDate must be greater than StartDate",
               memberNames: new[] { "EndDate" }
          );
       }
    }
}
于 2013-11-09T20:13:05.973 に答える
11

IValidatableObject インターフェイスは、IValidatableObject.Validate(ValidationContext validationContext) メソッドを実装するオブジェクトを検証する方法を提供します。このメソッドは常に IEnumerable オブジェクトを返します。そのため、 ValidationResult オブジェクトのリストを作成する必要があり、エラーがこれに追加されて返されます。空のリストは、条件を検証することを意味します。それはmvc 4では次のとおりです...

 public class LibProject : IValidatableObject
{
    [Required(ErrorMessage="Project name required")]

    public string Project_name { get; set; }
    [Required(ErrorMessage = "Job no required")]
    public string Job_no { get; set; }
    public string Client { get; set; }
    [DataType(DataType.Date,ErrorMessage="Invalid Date")]
    public DateTime ExpireDate { get; set; }


    IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
    {
        List < ValidationResult >  res =new List<ValidationResult>();
        if (ExpireDate < DateTime.Today)
        {
            ValidationResult mss=new ValidationResult("Expire date must be greater than or equal to Today");
            res.Add(mss);

        }
        return res; 
    }
}
于 2014-05-26T09:35:30.497 に答える