mam ValidationAttribute jak:ASP.NET MVC: ValidationAttribute i zlokalizowane ErrorMessage
public class Username : ValidationAttribute
{
public override bool IsValid(object value)
{
if (value == null)
return false;
return RegExp.Validate(RegExpLib.Username,value.ToString());
}
}
..i używając go tak:
public class AccountSignIn
{
[Username(ErrorMessageResourceName ="txtUsername",ErrorMessageResourceType=typeof(SignIn))]
public string Username { get; set; }
public string Password { get; set; }
public bool RememberMe { get; set; }
public string ReturnUrl { get; set; }
}
signin jest plik zasobów na App_GlobalResources i "txtUsername" - jest nazwą ciągu w pliku zasobów.
Problem: Komunikaty o błędach nie są wyświetlane.
Pytanie: Jak ustawić komunikat o błędzie, jeśli mam kilka języków na stronie internetowej.
Kolejna informacja:
Jestem w stanie dostęp SignIn.txtUsername
od Wyświetleń lub dowolny plik w projekcie. Z regulatora
ModelState.AddModelError("Username", Resources.SignIn.txtUsername);
działa dobrze, jak dobrze .. mogę przypisać ErrorMessage wewnątrz ValidationAttribute, ale dostałem błąd po drugiej walidacji spróbować ... jeśli I miejsce sprawdzić jak ten -
if(ErrorMessage != Resources.SignIn.txtUsername)
ErrorMessage = Resources.SignIn.txtUsername;
mam błąd po Przełączam na inny język - ErrorMessage można przypisać tylko raz.
Proszę doradzić, jak mogę to rozwiązać.
Z góry dziękuję.
Tak jak napisałem, używam zasobów globalnych "SignIn to resource file at App_GlobalResources" –
Niestety, nie można udostępniać zasobów w App_GlobalResources publicznych. Zamiast tego należy użyć pliku zasobów z folderu "Właściwości" - kliknij prawym przyciskiem myszy na projekcie, wybierz właściwości, z lewego menu wybierz "Zasoby" i kliknij "ten projekt ...". Zostanie utworzony domyślny plik zasobów o nazwie "Resources.resx". Możesz zmienić jego nazwę (np. "ModelErrors") i użyć w kodzie: [Wymagane (ErrorMessageResourceName = "Password_Required", ErrorMessageResourceType = typeof (Properties.ModelErrors))] – Feryt
Tak, to prawda. DataAnnotations istnieją poza ASP.NET, więc nie wiedzą nic o App_XxxResources i po prostu działają z tradycyjnymi plikami zasobów. –