代码之家  ›  专栏  ›  技术社区  ›  Brandon

如何替换标准数据注释错误消息

  •  7
  • Brandon  · 技术社区  · 15 年前

    我正在使用system.componontModel.dataAnnotations验证我的模型对象。我如何替换消息的标准属性(必需和字符串长度),而不向每个属性提供错误消息属性或对它们进行子分类?

    2 回复  |  直到 11 年前
        1
  •  8
  •   friism    12 年前

    写新文章是因为我需要比评论更多的格式。

    验证属性 -验证属性的基类。

    如果发生验证错误,将按以下方法创建错误消息:

    public virtual string FormatErrorMessage(string name)
    {
        return string.Format(CultureInfo.CurrentCulture, this.ErrorMessageString, new object[] { name });
    }
    

    下一个看 错误消息字符串 属性:

    protected string ErrorMessageString
    {
        get
        {
            if (this._resourceModeAccessorIncomplete)
            {
                throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, DataAnnotationsResources.ValidationAttribute_NeedBothResourceTypeAndResourceName, new object[0]));
            }
            return this.ResourceAccessor();
        }
    }
    

    财产 资源访问器 可从以下位置设置:

    ValidationAttribute..ctor(Func<String>)
    ValidationAttribute.set_ErrorMessage(String) : Void
    ValidationAttribute.SetResourceAccessorByPropertyLookup() : Void
    

    首先,它被提供的类精确地用于格式化消息,其次,当我们通过 错误消息 属性,第三个-使用资源字符串时。 根据您的情况,您可以使用 错误消息资源名称 .

    在其他地方,让我们看看派生构造函数,例如,range属性:

    private RangeAttribute()
        : base((Func<string>) (() => DataAnnotationsResources.RangeAttribute_ValidationError))
    {
    }
    

    在这里 rangeattribute_validationError(范围属性验证错误) 从资源加载:

    internal static string RangeAttribute_ValidationError
    {
        get
        {
            return ResourceManager.GetString("RangeAttribute_ValidationError", resourceCulture);
        }
    }
    

    因此,您可以为不同的tan默认区域性创建资源文件,并覆盖其中的消息,如下所示:

    http://www.codeproject.com/KB/aspnet/SatelliteAssemblies.aspx

    http://msdn.microsoft.com/en-us/library/aa645513(VS.71).aspx

        2
  •  6
  •   Vitaliy Ulantikov Peter Miehle    15 年前

    你可以使用 错误消息 基类的属性 验证属性 对于所有DataAnnotations验证程序。

    例如:

    [Range(0, 100, ErrorMessage = "Value for {0} must be between {1} and {2}")]
    public int id;
    

    也许会有帮助。

    推荐文章