Gostaria de especificar que um campo decimal para um preço deve ser> = 0, mas não quero impor um valor máximo.
Aqui está o que tenho até agora ... Não sei qual é a maneira correta de fazer isso.
[Range(typeof(decimal), "0", "??"] public decimal Price { get; set; }
c#
.net
asp.net-mvc
data-annotations
user169867
fonte
fonte
Respostas:
Que tal algo como isso:
Isso deve fazer o que você está procurando e pode evitar o uso de strings.
fonte
The field Fixed price discount must be between 0.01 and 1.79769313486232E+308.
Se você está preocupado com a aparência da string, você pode fazer o seguinte:
Isso terá uma mensagem de erro padrão de:
fonte
Parece que não há escolha a não ser colocar o valor máximo manualmente. Eu esperava que houvesse algum tipo de sobrecarga em que você não precisasse especificar um.
fonte
[Min(0)]
- também possui uma mensagem de validação melhor. Sugiro atualizar sua respostaVocê pode usar:
Isso imporá um valor mínimo necessário de 0 (zero) e nenhum valor máximo.
Você precisa DataAnnotationsExtensions para usar isso.
fonte
Se você trabalha com preços, tenho certeza de que pode assumir com segurança que nada custará mais de 1 trilhão de dólares.
Eu usaria:
Ou, se você realmente precisar, basta colar o valor de
Decimal.MaxValue
(sem vírgulas):79,228,162,514,264,337,593,543,950,335
Qualquer um deles funcionará bem se você não for do Zimbábue.
fonte
[Range(0.0,Decimal.MaxValue)]
?Você pode usar a validação personalizada:
Tipo de métodos de validação:
fonte
Eu tentaria algo assim:
O problema de fazer isso, porém, é que o compilador deseja uma expressão constante, o que não permite
((double)0).ToString()
. O compilador irá assumirfonte
usando Range com
Espero que ajude
fonte
[Intervalo (0,01,100000000, ErrorMessage = "O preço deve ser maior que zero!")]
fonte
Eu diria que,
decimal.MaxValue.ToString()
como esse é o teto efetivo para o tipo decmial, é equivalente a não ter um limite superior.fonte