2014-10-20 2 views
0

У меня есть модель, которая выглядит примерно так:Пользовательские проверки сообщения, конкретный язык

[LocalizedRegularExpression(@"^[\w-\.][email protected]([\w-]+\.)+[\w-]{2,4}$", "RedesignEmailValidationError")] 
public string EmailAddress { get; set; } 

[Compare("EmailAddress", ErrorMessage = "Emails mismatch!")] 
public string EmailConfirm { get; set; } 

Проблема заключается в том, что сообщение об ошибке не локализована. Какой был бы лучший подход к этому?

PS: Я получаю текст, специфичный для языка, который должен быть в этой форме в модели; в идеале я хотел бы использовать предоставленный там текст.

ответ

2

Кроме того, если вы не полагаться на поставщика ресурсов по умолчанию, вы должны реализовать ее самостоятельно.

Как:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Event)] 
public sealed class LocalizedDisplayNameAttribute : DisplayNameAttribute { 
    public LocalizedDisplayNameAttribute() { 
    } 

    public LocalizedDisplayNameAttribute(object context) { 
    Context = context; 
    } 

    public object Context { get; set; } 

    public override string DisplayName { 
    get { 
     // TODO: override based on CultureInfo.CurrentCulture and Context here 
     return "LocalizedAttributeName"; 
    } 
    } 
} 

[AttributeUsage(AttributeTargets.Property)] 
public class LocalizedCompareAttribute : CompareAttribute { 

    public object Context { get; set; } 

    public LocalizedCompareAttribute(string otherProperty) 
    : base(otherProperty) { 
    } 

    public override string FormatErrorMessage(string name) { 
    // TODO: override based on CultureInfo.CurrentCulture and Context here 
    string format = "Field '{0}' should have the same value as '{1}'."; 
    return string.Format(CultureInfo.CurrentCulture, format, name, OtherPropertyDisplayName);  
    } 
} 

т.д.

Использование:

[LocalizedCompare("EmailAddress", Context = "ResourceKey_EmailMismatch")] 
[LocalizedDisplayName("ResourceKey_Email")] 
public string EmailConfirm { get; set; } 
+0

Мне нравится этот метод, спасибо! – RealityDysfunction

2

Вы должны использовать ErrorMessageResourceName и ErrorMessageResourceType

Должно быть что-то вроде этого:

[Compare("EmailAddress", ErrorMessageResourceName = "ConfirmEmailErrorMessage", ErrorMessageResourceType=typeof(your_resource_type)] 
public string EmailConfirm { get; set; } 
Смежные вопросы