none
Type = "number" para un decimal RRS feed

  • Pregunta

  • Hola,

    Tengo un problema con los tipos de datos decimal, el caso es que para Internet Explorer lo veo bien pero para Google Chrome no muestra el dato. Por lo que veo antes de mostrarlo ya lo esta formateando a string y de 25.23 lo pasa a 25,23, lo que hace que no se muestre en Chrome.

    Es decir yo lo recupero así:    @Html.EditorFor(model => model.Precio)

    Como esto no me pone el formato de bootstrap y me pone por defecto el Type="text" en el input he creado una EditTemplate para los Decimales. y le ponto class = "form-control", type = "number".

    Esto hace que el control se vea bien pero en Chrome NO lo muestre... curiosamente si en IE. 

    Mi proyecto es MVC con razor y un modelo Entity Framework.

    La propiedad declarada de esta forma:    public Nullable<decimal> Precio{ get; set; }

    Lo he intentado de muchas maneras y en chrome no quiere mostrarse aunque este en el value:

    @Html.EditorFor(model => model.Precio)
    @Html.TextBoxFor(model => model.Precio,  format,new { @class = "form-control", @type = "number" })
    @Html.EditorFor(model => model.Precio, "{0:0.00}", new { @type = "number" })
    @Html.TextBoxFor(model => model.Precio, "{0:0.00}", new { @type = "number" })

    Si cambo el Type ="text" me muestra el dato sin problemas.

    Muchas gracias por la ayuda

     

    miércoles, 22 de julio de 2015 10:17

Todas las respuestas

  • hola

    es que el type=number es el formato de html5 ester hasta donde se no aplica todas las culturas, sino solo la EEUU, ademas cada browser implementa estos tipos de html5 de una forma diferente

    deberias usar jquery para aplicar una mascara numerica que respete la cultura, jquery al ser uan libreria independeitne de html5 no depende del browser

    hay librerias de globalizacion

    globalize

    que deberias revisar y ver de implementar

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 22 de julio de 2015 12:03
  • Buenas!

    Antes que nada: Es Internet Explorer el que lo hace mal.

    Echa un vistazo a http://caniuse.com/#search=number y verás que Internet Explorer no soporta <input type="number" />

    Tu me dirás que en IE lo ves bien y es cierto, pero eso es debido a un efecto colateral de como funciona HTML... Básicamente si un navegador se encuentra un type de input que no reconoce debe tratar este input como si fuese type="text". De ahí que en IE lo veas bien, pero no verás las flechitas para subir y bajar el valor.

    Si lo miras en Chrome no ves nada, al igual que en FF, y eso es porque input type="text" solo acepta números en la cultura americana. Eso está definido así en el estándard de la W3C.

    Tu problema es que tienes un número en coma flotante, pero la cultura del servidor debe ser la española, por lo que el número 1.2 te lo convierte a la cadena 1,2... y eso no es un valor correcto para un input type="number".

    Hay dos soluciones:

    1. O bien estableces la cultura del servidor a la americana
    2. O bien no usas input type="number" y usas JavaScript para validar los datos

    Elijas la que elijas... bienvenido al infierno ;-)


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis

    miércoles, 22 de julio de 2015 12:22