如果在模型类中但不在页面属性上,则触发自定义验证 [英] Custom validation fires if in model class but not on page property
本文介绍了如果在模型类中但不在页面属性上,则触发自定义验证的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个用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屋!
查看全文