【问题标题】:Custom error message on model validation ASP.NET Core MVC模型验证 ASP.NET Core MVC 上的自定义错误消息
【发布时间】:2018-05-25 13:30:03
【问题描述】:

我正在使用 ASP.NET Core MVC 项目,在该项目中,我们希望将自定义消息设置为具有字段名称的必填字段,而不是框架提供的通用消息。
为此,我创建了一个自定义类,如下所示:

public class GenericRequired : ValidationAttribute
{
    public GenericRequired() : base(() => "{0} is required")
    {

    }

    public override bool IsValid(object value)
    {
        if (value == null)
        {
            return false;
        }
        string str = value as string;
        if (str != null)
        {
            return (str.Trim().Length != 0);
        }
        return true;
    }
}

并在模型中使用该类。

[GenericRequired]
[DisplayName("Title")]        
public string Name { get; set; }

在查看页面上:

<span asp-validation-for="Name" class="text-danger"></span>

但消息未显示或验证不起作用。有没有其他方法可以让它工作?

【问题讨论】:

  • 只使用[Required(ErrorMessage = "{0} is required")]有什么问题?
  • 谢谢! @KirkLarkin 我不想每次都写是必需的,更改文本需要时间。
  • 是的,我想你可能会回来。你的代码对我有用,所以它一定是你缺少的东西。但无论如何,我建议您创建 RequiredAttribute 的子类,并且不要重新发明 IsValid 功能。
  • @KirkLarkin:你和 Core 核对过吗?有用?好的,我试试RequiredAttribute
  • 这里去:RazorPagesDemo客户模型

标签: c# validation asp.net-core asp.net-core-mvc


【解决方案1】:

您的GenericRequired 实现仅适用于服务器端 验证。在创建ValidationAttribute 的子类时,您只会获得开箱即用的服务器端验证。为了使这项工作与客户端验证一起工作,您需要实现IClientModelValidator并添加一个jQuery验证器(链接页面下方的说明)。

正如我在 cmets 中所建议的,您可以改为将 RequiredAttribute 子类化以获得您想要的,例如:

public class GenericRequired : RequiredAttribute
{
    public GenericRequired()
    {
        ErrorMessage = "{0} is required";
    }
}

所做的只是更改ErrorMessage,保留服务器端和客户端验证,这对您的用例来说要简单得多。

【讨论】:

  • 我关注this validation sample project 进行客户端验证,但它也适用于服务器端:(
  • 是的,当然。它实现了服务器端和客户端验证,而您的 GenericRequired 仅实现服务器端。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-23
  • 2021-08-14
  • 1970-01-01
相关资源
最近更新 更多