2009-07-14 7 views
38

Uwielbiam pisać funkcje sprawdzania poprawności w moim kontrolerze, które modyfikują ModelState, jeśli sprawdzanie poprawności nie powiedzie się. Na przykład:Jaki jest sens kluczowego parametru w ModelState.AddModelError w ASP.NET MVC?

private bool ValidateMoney(string raw, string name, decimal min, decimal max) { 
    try { 
     var dec = Convert.ToDecimal(raw); 

     if (dec < min) { 
      throw new ArgumentOutOfRangeException(name + " must be >= " + min); 
     } 
     else if (dec > max) { 
      throw new ArgumentOutOfRangeException(name + " must be <= " + max); 
     } 
    } 
    catch (Exception ex) { 
     ModelState.AddModelError(name, ex.GetUserMessage()); 
    } 
    return ModelState.IsValid; 
} 

Ale, nigdy nie wiem, co umieścić na tej głupiej „klucz” argument ModelState.AddModelError. (W tym przykładzie po prostu ustawiłem go na nazwę wyświetlaną interfejsu użytkownika).

Co myśleli deweloperzy MVC, kiedy go dodali?

+3

Głównym argumentem nie jest głupi w ogóle, może dokumentacja nie jest jasne, jak powinno być. :) – splattne

Odpowiedz

52

Klucz jest używany przez pomocnika HTML ValidationMessage do poznania dokładnego komunikatu o błędzie do wyświetlenia.

Przykład:

<%=Html.TextBox("Name") %> <br /> 
<%=Html.ValidationMessage("Name") %> 

pomocnik ValidationMessage wyświetli komunikat, że ma klucz „Nazwa” w słowniku ModelState.

+6

Walidacja jest używana we wszelkiego rodzaju aplikacjach, nie tylko w blogach. –

+2

@Frank z szacunkiem, czy to nie jest fajne? Błąd pojawia się prosto obok pożądanego pola! Dowiedziałem się o tym dopiero po tym, jak Google sprowadził mnie na to pytanie. – gideon

+4

Klucz może być pustym ciągiem, ale nie może mieć wartości null. Jeśli klucz jest pusty, można go zobaczyć za pomocą pomocnika html.ValidationSummary (false) html –

9

Parametr key może zostać użyty do powiązania błędu sprawdzania poprawności z polem formularza.

Jeśli używany @Html.TextBoxFor (lub podobny) i @Html.ValidationMessageFor, można uzyskać wartość Kluczem jest z HTML name pola jest potwierdzony (wykorzystanie Zbadaj element).

Jeśli właśnie użyłeś kodu HTML <input>, możesz dodać symbol zastępczy walidacji za pomocą @Html.ValidationMessage("AKeyIMadeUp") i otrzymać komunikat, który pojawi się w nim w ten sposób: ModelState.AddModelError("AKeyIMadeUp", "The value you entered is no good");.

1

Właściwie można ustawić dowolną wiadomość walidacji w czasie, gdy złożenie formularza nieudana przypuszczać zrobić pole w modelu

[Required] 
    [DataType(DataType.Password)] 
    [Display(Name = "Current password")] 
    public string OldPassword { get; set; } 

a jednocześnie swoją ModelState dostał nieważny można ustawić komunikat o błędzie wiążą z tej dziedziny, takich jak as.

ModelState.AddModelError("OldPassword", "Current Password do not match "); 

wówczas komunikat o błędzie będzie wiązać się z pola w modelu o nazwie „Oldpassword”

Powiązane problemy