自定义验证属性未触发 IsValid 方法

问题描述 投票:0回答:1

我目前正在 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 时会显示消息。

c# asp.net-mvc razor asp.net-core-mvc
1个回答
0
投票

上面的帖子不包含

SaveData()
操作方法定义代码。

但是除了修复自定义属性命名(声明

CustomValidationAttribute
)之外,您的
SaveData
操作方法应声明如下:

[HttpPost]
public IActionResult SaveData(Company company)

如果您的操作方法未引用

Company
对象,则不会触发自定义属性的
IsValid()
方法。

© www.soinside.com 2019 - 2024. All rights reserved.