Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASP.NET MVC 2中本地化错误消息(默认验证属性)_C#_Asp.net Mvc_Validation_Asp.net Mvc 2_Localization - Fatal编程技术网

C# 在ASP.NET MVC 2中本地化错误消息(默认验证属性)

C# 在ASP.NET MVC 2中本地化错误消息(默认验证属性),c#,asp.net-mvc,validation,asp.net-mvc-2,localization,C#,Asp.net Mvc,Validation,Asp.net Mvc 2,Localization,我正在一个多语言网站上工作,我想本地化大多数ValidationAttribute的验证错误消息,例如[Required] 我知道这是可以做到的,正如本文所示 但我想像在这里使用自定义验证属性那样自定义错误消息: [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false,

我正在一个多语言网站上工作,我想本地化大多数ValidationAttribute的验证错误消息,例如
[Required]

我知道这是可以做到的,正如本文所示

但我想像在这里使用自定义验证属性那样自定义错误消息:

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property,
                                     AllowMultiple = false,
                                     Inherited = true)]
public sealed class ValidateminRequiredNonalphanumericCharactersAttribute
: ValidationAttribute
{

    private const string _defaultErrorMessage = // Message From Resource Here ( i will be using two variables in this message ) 
    private readonly int _minnonalphanumericCharactersCounter = Membership.Provider.MinRequiredNonAlphanumericCharacters;

    public ValidateminRequiredNonalphanumericCharactersAttribute()
        : base(_defaultErrorMessage)
    {
    }

    public override string FormatErrorMessage(string name)
    {
        return String.Format(CultureInfo.CurrentUICulture, 
            ErrorMessageString, name, _minnonalphanumericCharactersCounter);
    }

    public override bool IsValid(object value)
    {
        string valueAsString = value as string;

        if (String.IsNullOrEmpty(valueAsString))
            return false;

        int nonalphanumericCharactersCounter = 0;
        char[] password = valueAsString.ToCharArray();

        foreach (char c in password)
        {
            if (!char.IsNumber(c) && !char.IsLetter(c))
                nonalphanumericCharactersCounter++;
        }

        return (nonalphanumericCharactersCounter >= _minnonalphanumericCharactersCounter);
    }
}

有什么想法吗?

我知道怎么做了。这真的很简单和直接

我所做的是创建了自己的自定义
RequiredAttribute
。而不是使用内置的
RequiredAttribute

唯一的缺点是您需要自己实现验证器的逻辑

我知道有些人可能会认为,重新实施已经存在的东西是一种过头的想法。(重新发明轮子)但通过这种方式,我将完全控制验证器逻辑和错误消息

正如您所见,逻辑是在下面的
IsValid()
方法中实现的

下面是我创建的RequiredAttribute类:

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, 
                                         AllowMultiple = true, 
                                         Inherited = true)]
public sealed class RequiredAttribute : ValidationAttribute
{
    private const string _defaultErrorMessage = // Error Message
    // Notice that i can include the filed name in the error message 
    // which will be provided in the FormatErrorMessage Method 

    public RequiredAttribute()
        : base(_defaultErrorMessage)
    {
    }

    public override string FormatErrorMessage(string name)
    {
        return String.Format(CultureInfo.CurrentUICulture, ErrorMessageString,
            name);
    }

    public override bool IsValid(object value)
    {
        if (value == null || String.IsNullOrWhiteSpace(Convert.ToString(value)))
            return false;
        else
            return true;
    }
}
现在,在使用验证器时,您需要提供新类的完整引用,因为它将与上面示例中的默认内置
System.ComponentModel.DataAnnotations.RequiredAttribute
类冲突

在我的例子中,最终结果是这样的:

    [Amaly.Data.Validators.Required]
    public string Username { get; set; }

希望这是有用的。

在你给我指出这个答案后,我复制了你的代码并将其包含在我的应用程序中,然后发现其中有一个严重的错误(我花了几个小时才弄清楚为什么使用我的自定义属性进行验证是奇怪的。错误在IsValid()方法中。此方法应包含以下内容:if(value==null | | String.IsNullOrWhiteSpace(value.ToString()){return false;}返回true;请为他人着想更正它。关键是要删除as字符串转换,因为它会导致各种值类型出现问题。@谢谢您修复我的错误代码,,,我想我没有这个问题,因为我只使用了基元类型的验证程序。
    [Amaly.Data.Validators.Required]
    public string Username { get; set; }