1

我有奇怪的问题。ModelState 有错误。但我对此没有规定。没有过滤器,验证器文件中没有规则。

我的代码。视图模型:

[Validator(typeof(TestValidation))]
public class PayerPayRateViewModel 
{

    public int TestId { get; set; }

    public bool AllServices { get; set; }

    public int ParentEntityId { get; set; }
}

验证器

 public class TestValidation : BaseEntityRepositoryValidator<Core.Domain.Model.Entities.Payer, PayerPayRateViewModel>
{
    public TestValidation()
    {
        RuleFor(x => x.ParentEntityId).Must(CheckUniqueService);
    }

    protected bool CheckUniqueService(PayerPayRateViewModel model, int value)
    {
        if (model.AllServices)
        {
            return true;
        }

        return false;          
    }      
}

如果我有值为 0 的 TestId,我会得到“ TestId: Field is required ”。

当我从 Viewmodel 类中删除验证属性时,我得到“ A value is required. ”错误。

为什么会发生?

4

1 回答 1

4

因为您试图将空字符串绑定到不可为空的类型。如果您希望发生这种情况,请使用可为空的类型:

[Validator(typeof(TestValidation))]
public class PayerPayRateViewModel 
{
    public int? TestId { get; set; }

    public bool AllServices { get; set; }

    public int ParentEntityId { get; set; }
}

默认情况下,有一个隐式的Required 属性应用于所有不可为空的类型(想想整数、日期时间、小数......)。

顺便说一句,您可以禁用此默认行为:

DataAnnotationsModelValidatorProvider
    .AddImplicitRequiredAttributeForValueTypes = false;
于 2012-08-17T12:48:31.937 回答