none
Mascarar campo de valor monetario RRS feed

  • Pergunta

  • Bom dia,

    estou usando o Jquery maskmoney para mascarar dados de valores monetário, mas quando faço isso não passa na validação no lado do cliente, ele diz que o valor deve ser um numero. estou usando váriavel do tipo decimal para esses campos monetários. Como vocês fazem nas aplicações web de vocês? obrigado.

    quarta-feira, 23 de julho de 2014 12:29

Respostas

  • Qual a mensagem que está recebendo? 

    "The value blablabla is not a valid for blablabla" ??

    Se for esta mensagem a forma de solucionar é a seguinte:

    Abra o jquery.validade.js e procure pela validação numérica:

    "number: function(value, element) { "

    Altere o retorno para:

    this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:[\.,]\d+)?$/.test(value); 

    Caso assim não dê certo, peço para que olhe este link:

    http://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx/


    Victor Santos | MCSD, MS, MTA

    • Marcado como Resposta Alan F. Almeida sexta-feira, 25 de julho de 2014 17:15
    quinta-feira, 24 de julho de 2014 19:52

Todas as Respostas

  • Coloca seu código pra gente ver o que você está fazendo de errado.

    Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quarta-feira, 23 de julho de 2014 14:02
  • Jean segue o codigo.

    propriedade na classe obra:

     		[Required(ErrorMessage = "Campo Valor da Obra é obrgatório!")]
     		public decimal VlrObra { get; set; }

    Na View:

                    @Html.Label("Valor")
                    @Html.TextBoxFor(model => model.obra.VlrObra)

    Codigo Jquery para gerar a mascara usando o maskmoney:

        $(document).ready(function () {
            $('#obra_VlrObra').maskMoney({ showSymbol: true, symbol: "R$", decimal: ",", thousands: "." });
        });


    • Editado Alan F. Almeida quarta-feira, 23 de julho de 2014 14:58 Retirar comentario de codigo postado.
    quarta-feira, 23 de julho de 2014 14:57
  • Boa tarde Alan,

    O problema está na sua máscara, ela está enviando o "R$" para o model que está rejeitando por isto não ser numérico.

    Porque você não utiliza sem o símbolo? Deixa ele com o label.

    Abraços


    Victor Santos | MCSD, MS, MTA

    quarta-feira, 23 de julho de 2014 18:13
  • Vitor obrigado pela resposta, eu fiz um teste e retirei o simbolo R$ e mesmo assim continua dando erro na validação.
    quarta-feira, 23 de julho de 2014 18:53
  • Alan,

    Qual a língua que está definida na base de dados? A máscara trabalha no mesmo formato que ela?

    Senão o problema vai estar aí, na questão das vírgulas e pontos.


    Victor Santos | MCSD, MS, MTA

    quarta-feira, 23 de julho de 2014 22:44
  • Victor, a base de dados está no idioma ingles, o collation é o Latin1_General_CI_AS, mas como eu disse a validação ocorre no lado do cliente, nem chega a ir para o servidor, eu mudei a mensagem no metodo ModelState.IsValid do controller e no metodo Validation.Sumary que fica na pagina para ter certeza de onde a validação estava pegando o erro e é na pagina.
    quinta-feira, 24 de julho de 2014 13:50
  • Qual a mensagem que está recebendo? 

    "The value blablabla is not a valid for blablabla" ??

    Se for esta mensagem a forma de solucionar é a seguinte:

    Abra o jquery.validade.js e procure pela validação numérica:

    "number: function(value, element) { "

    Altere o retorno para:

    this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:[\.,]\d+)?$/.test(value); 

    Caso assim não dê certo, peço para que olhe este link:

    http://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx/


    Victor Santos | MCSD, MS, MTA

    • Marcado como Resposta Alan F. Almeida sexta-feira, 25 de julho de 2014 17:15
    quinta-feira, 24 de julho de 2014 19:52
  • Desculpe a demora em responder não pude mexer com isso hoje de manhã, deu certo, agora passa na validação muito obrigado. Mas isso não vai trazer nenhum problema nas validação?
    sexta-feira, 25 de julho de 2014 17:15
  • Boa tarde Alan,

    Tranquilo, não vai dar problema não.. apenas alteramos o regex para o nosso padrão ao invés do americano.


    Victor Santos | MCSD, MS, MTA

    sexta-feira, 25 de julho de 2014 19:51