我目前正在 ASP.NET Core MVC 中实现一些自定义属性,但我遇到了
ValidationAttribute
的问题。应在表单提交时触发验证。
public class Company
{
[CustomRequired]
[CustomValidation]
public string Name { get; set; }
}
此属性工作正常,当我提交表单时,会在调试模式下触发覆盖。
public class CustomRequired : RequiredAttribute
{
public override string FormatErrorMessage(string name)
{
//logic
return name;
}
}
这就是问题所在。如果我创建构造函数,它会被调用,但重写的方法永远不会触发。
public class CustomValidation : ValidationAttribute
{
protected override ValidationResult? IsValid(object? value, ValidationContext validationContext)
{
//logic
return ValidationResult.Success;
}
}
这也是前端实现:
@model Company;
<form method="post" asp-controller="Company" asp-action="SaveData">
@Html.TextBoxFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name, null, new {@class="text-danger"})
<button type="submit">Submit</button>
</form>
我尝试使用一些默认属性,如
[Required]
、[StringLength]
,它们都工作正常,当我单击 Submit 时会显示消息。
上面的帖子不包含
SaveData()
操作方法定义代码。
但是除了修复自定义属性命名(声明
CustomValidationAttribute
)之外,您的SaveData
操作方法应声明如下:
[HttpPost]
public IActionResult SaveData(Company company)
如果您的操作方法未引用
Company
对象,则不会触发自定义属性的 IsValid()
方法。