2010-02-01 19 views

Odpowiedz

8

Pisanie nowego postu, ponieważ potrzebuję więcej formatowania niż podaje komentarz.

Spójrz na ValidationAttribute - podstawowa klasa atrybutów sprawdzania poprawności.

Jeśli błąd sprawdzania poprawności wystąpił, komunikat o błędzie zostanie utworzony metodą:

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

Następny spojrzenia na ErrorMessageString właściwość:

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

Property ResourceAccessor można setted od:

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

Pierwsza z nich jest dokładnie używana przez klasy pochodne do formatowania wiadomości, druga - gdy ustawiamy komunikat o błędzie za pomocą właściwości ErrorMessage, a trzecia - gdy używane są ciągi zasobów. W zależności od sytuacji możesz użyć ErrorMessageResourceName.

indziej przyjrzyjmy konstruktorów pochodnych, dla naszego przykładu, Rząd Atrybut:

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

Tutaj RangeAttribute_ValidationError jest ładowany z zasobu:

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

Więc można utworzyć plik zasobów dla różnych tan domyślna kultura i nadpisywanie wiadomości w następujący sposób:

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

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

+0

Wielkie dzięki Veton. Ostatnia część, o której wspomniałeś, zupełnie mi umknęła. –

+6

Nie mogę zrozumieć, jak powinny być nazwane pliki zasobów (i gdzie umieszczone), aby zastąpić ResourceManager z DataAnnotations.dll. – wRAR

6

Można użyć ErrorMessage właściwość klasy bazowej ValidationAttribute dla wszystkich DataAnnotations weryfikatorów.

Na przykład:

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

Może to pomoże.

+3

Prawda. Ale czy istnieje sposób na zastąpienie domyślnej wiadomości naraz? –

+1

@FitzchakYitzchaki Czy kiedykolwiek to osiągnąłeś? –

Powiązane problemy