c# - 如何更改类型验证错误消息?

标签 c# entity-framework validation entity-framework-6 data-annotations

我首先在 ASP MVC 项目中使用 Entity Framework 代码,我想更改为验证数字类型而出现的错误消息。

我有这样的属性

public decimal Amount1 { get; set; }

如果我在字段中输入非数字,我会收到消息:字段 Amount1 必须是数字。如何更改该消息?

对于其他验证,例如 Required,我可以使用 ErrorMessage 参数,例如:[Required(ErrorMessage = "My message...")]

是否有类似的验证类型?

谢谢。

最佳答案

不幸的是,Microsoft 没有公开任何接口(interface)来更改默认消息。

但是如果你急于更改这些不友好的消息,你可以通过为 decimal 创建验证属性,创建相应的验证器并最终在应用程序启动时将其注册到 DataAnnotationsModelValidatorProvider 来实现。希望这可以帮助。

更新:

示例如下

第 1 步:创建验证属性

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Parameter | AttributeTargets.Property, AllowMultiple = false)]
public class ValidDecimalAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext) {
        if (value == null || value.ToString().Length == 0) {
            return ValidationResult.Success;
        }
        decimal d;
        return !decimal.TryParse(value.ToString(), out d) ? new ValidationResult(ErrorMessage) : ValidationResult.Success;
    }
}

第 2 步:创建验证器

public class ValidDecimalValidator : DataAnnotationsModelValidator<ValidDecimal>
{
    public ValidDecimalValidator(ModelMetadata metadata, ControllerContext context, ValidDecimal attribute)
        : base(metadata, context, attribute)
    {
        if (!attribute.IsValid(context.HttpContext.Request.Form[metadata.PropertyName]))
        {
            var propertyName = metadata.PropertyName;
            context.Controller.ViewData.ModelState[propertyName].Errors.Clear();
            context.Controller.ViewData.ModelState[propertyName].Errors.Add(attribute.ErrorMessage);
        }
    }
}

第 3 步:在 Global.asax 中的 Application_Start() 方法或 Main() 方法下注册适配器

DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(ValidDecimal), typeof(ValidDecimalValidator));

第 4 步:最后用这个属性装饰模型中的属性

[ValidDecimal(ErrorMessage = "Only decimal numbers allowed")]
public decimal CPEHours { get; set; }

希望对您有所帮助。

关于c# - 如何更改类型验证错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48349697/

相关文章:

c# - Windows 10 通用 XAML Toast 通知

c# - 重绘时如何修复面板闪烁?

c# - 从 xsd 生成的代码中复数化属性

ruby-on-rails - Rails 表单在验证错误后呈现错误的 URL(不保留传递的参数)

amazon-web-services - 使用无服务器框架请求验证

c# - 为什么这种类型转换会导致错误?

c# - Linq 实体 4.0 ('Include' ) : In search of an elegant way

entity-framework - EF 5.0 枚举未生成

entity-framework - 有人能解释一下 Entity SQL 中的 REF、CREATEREF、DEREF、KEY 是做什么的吗?

c# - 如何不允许用户在文本框中输入数字