我目前正在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>

我try 使用一些默认属性,如Required、StringLength,它们都工作得很好,当我单击提交时会显示消息.

推荐答案

上面的帖子没有包含SaveData()操作方法定义代码.

但是除了修复custom attribute naming(声明CustomValidationAttribute)之外,你的SaveData操作方法应该声明如下:

[HttpPost]
public IActionResult SaveData(Company company)

如果您的操作方法没有引用Company对象,则不会触发定制属性的IsValid()方法.

Csharp相关问答推荐

当Visual Studio处于升级管理模式时,无法安装Torch运行时

如何从泛型方法返回一个可为空的T,其中T:notnull?

如何在C#中删除一个特殊字符,如"使用Regex"

如何从HttpContext获取请求正文

实体框架核心上是否支持使用NPGSQL的字符串聚合?

如何注销Microsoft帐户?

为什么SignalR在每个Blazor服务器应用程序启动时最多启动8个服务器?

Quartz调度程序不调用作业(job)类

TeamsBot SendActivityActivityTypes与ActivityTypes同步.键入不再起作用

C#中浮点数的System.Text.Json序列化问题

如何让两个.NET版本不兼容的项目对话?

Blazor Fluent UI DialogService,<;FluentDialogProvider/>;错误

源代码生成器:CS8795分部方法';Class1.GetS2(字符串)';必须有实现部分,因为它有可访问性修饰符?

我找不到ASP.NET Web应用程序(.NET框架).已 Select .NET框架项目和项模板以及此组件(&Q;)

DropDownListFor未显示选定值

并发表更新.EF核心交易

如何为控制器PUT操作绑定对象数组

C#中的逻辑运算符用作单词';is';and';and';

无法创建&Quot;&Quot;类型的实例,因为无法将一个或多个参数绑定到

如何在flutter dart中使用publicKey.xml文件进行rsa加密,我遇到了问题Exception:Could not parse BigInt