Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# FLuentValidation中未显示可空类型的错误消息_C#_.net_Asp.net Mvc 3_Fluentvalidation - Fatal编程技术网

C# FLuentValidation中未显示可空类型的错误消息

C# FLuentValidation中未显示可空类型的错误消息,c#,.net,asp.net-mvc-3,fluentvalidation,C#,.net,Asp.net Mvc 3,Fluentvalidation,我对流畅的验证有问题 我想检查验证,因此该属性的填充必须大于另一个属性。 代码如下: public decimal? MonthlySalesNet { get; set; } public decimal? MonthlySalesGross { get; set; } 以下是验证: RuleFor(x => x.MonthlySalesGross.Value).GreaterThan(x => x.MonthlySalesNet.Value) .When

我对流畅的验证有问题

我想检查验证,因此该属性的填充必须大于另一个属性。 代码如下:

public decimal? MonthlySalesNet { get; set; }
public decimal? MonthlySalesGross { get; set; }
以下是验证:

RuleFor(x => x.MonthlySalesGross.Value).GreaterThan(x => x.MonthlySalesNet.Value)
            .When(x => x.MonthlySalesGross != null && x.MonthlySalesNet != null)
            .WithMessage("blahblah");
验证正在工作,但未显示消息。我错过什么了吗

当我将decimal更改为NOTNULLABLE类型并重新配置验证时,显示了错误消息validation。这对我来说很奇怪,谢谢(我在网上发布了同样的答案)

消息未显示,因为它认为它与错误的属性关联。使用RuleFor(x=>x.MonthlySalesGross.Value)时,它将规则与名为“Value”的属性相关联,而不是与MonthlySalesGross属性相关联

FluentValidation v3增加了对nullables的更好的支持(我在博客中提到了这一点),但目前这只适用于常量值,而不适用于引用其他属性的表达式。我计划在v3.1中扩展可为null的支持,以使用跨属性验证器,但现在您可以通过手动覆盖属性名称来解决这个问题。这将使错误与正确的属性重新关联:

RuleFor(x => x.MonthlySalesGross.Value)
    .GreaterThan(x => x.MonthlySalesNet.Value)
    .When(x => x.MonthlySalesGross.HasValue)
    .OverridePropertyName("MonthlySalesGross");

(请注意,您还必须在When子句中包含空检查)。

我在codeplex的fluent validation论坛中进行了交叉发布。答案如下: