Chciałbym określić, że pole dziesiętne dla ceny musi być> = 0, ale tak naprawdę nie chcę narzucać wartości maksymalnej.
Oto, co mam do tej pory ... Nie jestem pewien, jaki jest właściwy sposób, aby to zrobić.
[Range(typeof(decimal), "0", "??"] public decimal Price { get; set; }
c#
.net
asp.net-mvc
data-annotations
user169867
źródło
źródło
Odpowiedzi:
Co powiesz na coś takiego:
To powinno zrobić to, czego szukasz i możesz uniknąć używania ciągów.
źródło
The field Fixed price discount must be between 0.01 and 1.79769313486232E+308.
Jeśli obawiasz się ładnego wyglądu łańcucha, możesz to zrobić:
Spowoduje to wyświetlenie domyślnego komunikatu o błędzie:
źródło
Wygląda na to, że nie ma innego wyjścia, jak tylko ręcznie wprowadzić wartość maksymalną. Miałem nadzieję, że wystąpił jakiś rodzaj przeciążenia, w którym nie trzeba było go określać.
źródło
[Min(0)]
- to również ma lepszy komunikat walidacji. Proponuję zaktualizować swoją odpowiedźMożesz użyć:
Spowoduje to nałożenie wymaganej wartości minimalnej 0 (zero), ale żadnej wartości maksymalnej.
Aby z tego skorzystać, potrzebujesz DataAnnotationsExtensions .
źródło
Jeśli pracujesz z cenami, jestem pewien, że możesz bezpiecznie założyć, że nic nie będzie kosztować więcej niż 1 bilion dolarów.
Użyłbym:
Lub jeśli naprawdę tego potrzebujesz, po prostu wklej wartość
Decimal.MaxValue
(bez przecinków):79,228,162,514,264,337,593,543,950,335
Każdy z nich będzie działał dobrze, jeśli nie jesteś z Zimbabwe.
źródło
[Range(0.0,Decimal.MaxValue)]
?Możesz użyć niestandardowej weryfikacji:
Typ metod walidacji:
źródło
Chciałem spróbować czegoś takiego:
Problem z tym polega jednak na tym, że kompilator potrzebuje stałego wyrażenia, co jest zabronione
((double)0).ToString()
. Kompilator będzie braćźródło
używając Range with
Mam nadzieję, że to pomoże
źródło
[Zakres (0,01,100000000, ErrorMessage = "Cena musi być większa od zera!")]
źródło
Powiedziałbym,
decimal.MaxValue.ToString()
ponieważ jest to efektywny pułap dla typu decmial, co jest równoznaczne z brakiem górnej granicy.źródło