如果在模型类中但不在页面属性上,则触发自定义验证 [英] Custom validation fires if in model class but not on page property

查看:12
本文介绍了如果在模型类中但不在页面属性上,则触发自定义验证的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

下面是PageModel类和单独的Model类:

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属性调用该属性。

为什么会出现这种情况?我如何修复它?

推荐答案

我也遇到过这种情况。在我的例子中,我的问题是因为当我将属性从包装器类模型直接移动到PageModel时,我错过了[BindProperty]属性的添加。我知道你不是这样的。

在您的案例中,我确实看到您在除ContactModel.SomeData之外的所有属性上都有[Required]属性。也许添加[Required]会使事情如您所愿?

这篇关于如果在模型类中但不在页面属性上,则触发自定义验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆