0

日付範囲が常に満たされ、開始日が開始日より前に発生しないようにFluent Validationを使用しようとしています。流暢な妥当性検査: 'DateTime'に '値'の定義が含まれていません

私は最初の部分が正しく実行され、正しく起動されますが、2番目の部分は実装不可能なようです。

マイコード:

'DateTime' does not contain a definition for 'Value' and no extension method 'Value' accepting a first argument of type 'DateTime' could be found 

私のDateTimeは、両方の日付時刻がコンテンツを要求し、NULL可能ではありません。

public class Report1ToExcelValidator : AbstractValidator<Report1ToExcelViewModel> { 
    public Report1ToExcelValidator() { 
    RuleFor(x => x.Report1ToExcelDateFrom) 
     .NotEmpty().WithMessage("Please provide a valid beginning date for the range."); 
    RuleFor(x => x.Report1ToExcelDateTo) 
     .NotEmpty().WithMessage("Please provide a valid end date for the range.") 
     .GreaterThan(x => x.Report1ToExcelDateFrom.Value).WithMessage("The Date To must be after the Date From"); 
    } 
} 
すべてがアップつまずいます

はエラーを報告している、.GreaterThanです。 Intellisenseが可能なオプションを表示できるようにすると、フィールド名の後にあるものは.Date.Hourのようなものに限定されますが、これも機能しません。 .Valueはそのオプションのリストには存在しません。どちらも.HasValueはありません。

これは本当に混乱しています。


また、別の質問:1ページに存在する複数のフォームで個別の検証を行うにはどうすればよいですか?今私は一つのフォームしか持っていませんが、フォームのモデルは直接持ち込まれています。私は、フォームのモデルを抽象化してページ上に複数のモデルを持つことができるようにする方法がないようです。データが持ち込まされていないん今、私はちょうどにモデルを変更しようとしてい

:ページが@model CCS.Models.ReportViewModel代わりの@model CCS.Models.Report1ToExcelViewModelを参照して

public class ReportViewModel { 
    public Report1ToExcelViewModel Report1ToExcelViewModel { get; set; } 
} 

[Validator(typeof(Report1ToExcelValidator))] 
public class Report1ToExcelViewModel { 
    public Guid? Report1ToExcelRegion { get; set; } 
    public DateTime Report1ToExcelDateFrom { get; set; } 
    public DateTime Report1ToExcelDateTo { get; set; } 
} 

が、私は中に引っ張ってページを取得するように見えることはできませんフォームフィールドが認識されるようにReport1ToExcelViewModel。今のところ私はReport1ToExcelViewModelを上記のようにReportViewModelに直接持ち込んでいますが、'ReportViewModel' does not contain a definition for [fieldname]のためにエラーが出ます。

+0

を働いているだろう。 GreaterThan(x => x.Re port1ToExcelDateFrom) ' –

+0

正しく検証されません。私がDateFromより小さいDateToを持っていれば、それは捕まえられません。だから私はなぜそれがうまくいかないのかという質問をしているのです。また、2015年末までにわかったすべてのGoogleソースとMVC 5を参照すると、 '.Value'と' .HasValue'属性が使用されます。 –

+0

'.Value'を削除したと仮定して、コードに何か間違いはありません –

答えて

1

使用

.GreaterThan(x => x.Report1ToExcelDateFrom) 

.GreaterThan(x => x.Report1ToExcelDateFrom.Value) 

の代わりにあなたのモデルReport1ToExcelDateFromがないのでNULL可能日時

public DateTime ? Report1ToExcelDateFrom { get; set; } 

は `だけで使う完全

関連する問題