【问题标题】:Custom validation fires if in model class but not on page property如果在模型类中而不是在页面属性上,则会触发自定义验证
【发布时间】:2020-08-11 09:59:27
【问题描述】:

我有一个在 ASP.NET Core 2.0 中实现的联系人 Razor 页面。我正在使用模型绑定和自定义验证。

如果我在单独的模型类上使用自定义验证,则会调用验证方法。如果我对 PageModel 上的属性使用自定义验证,则不会调用验证方法。但是,所有属性都已成功绑定。

这是 PageModel 类和单独的模型类:

public class ContactModel : PageModel
{
    [BindProperty]
    public ContactMessageModel ContactMessageModel { get; set; }

    [BindProperty, CustomValidation]
    public string SomeData { get; set; }

    public IActionResult OnPostAsync()
    {
        if (!ModelState.IsValid)
        {
            return Page();
        }

        return RedirectToPage("MessageSent");
    }
}

public class ContactMessageModel
{
    [Required]
    public string Name { get; set; }

    [Required]
    public string Email { get; set; }

    [Required, CustomValidation]
    public string Message { get; set; }
}

一个测试验证属性类如下:

public class CustomValidationAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        return ValidationResult.Success;
    }
}

ContactMessageModel.Message 属性调用验证属性,但为ContactModel.SomeData 属性调用验证属性。

为什么会这样,我该如何解决?

【问题讨论】:

  • 我注意到了同样的事情。 @fractor - 你有没有找到这背后的任何原因,或者解决它的方法?

标签: asp.net-core razor-pages


【解决方案1】:

我也遇到了这个问题。就我而言,我的问题是因为当我将属性从包装类模型直接移动到 PageModel 时,我错过了添加 [BindProperty] 属性。我看你不是这样的。

在您的情况下,我确实看到您在除ContactModel.SomeData 之外的所有属性上都有[Required] 属性。也许添加[Required] 会得到你所期望的结果?

【讨论】:

    猜你喜欢
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 2015-12-13
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多