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

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

我目前正在 C# MVC Core 中实现一些自定义属性,但我遇到了 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>

我尝试使用一些默认属性,例如“必需”、“字符串长度”,它们都工作正常,并且当我单击“提交”时会显示消息。

c# asp.net-mvc model-view-controller
1个回答
0
投票

上面的帖子不包含

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

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

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

[HttpPost]
public IActionResult SaveData(Company company)

如果您的操作方法未引用

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

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