Ir al contenido principal

Como trabajar con decimales en ASP.Net MVC 5




Saludos a todos, este blog viene como una mezcla de varias cositas, es un experimento ya que peculiarmente he notado que casi no hay blogs dedicados a tips de programación de .Net en español y ciertamente la barrera de idiomas afecta de alguna manera u otra al desarrollador que busca una solución a sus problemas y la otra vertiente es que simplemente deseo ayudar, ayudar a quienes duran horas o días estancados en problema que quizás se podía resolver en pocas líneas de código, así que ¿Por qué no compartir las experiencias vividas para que otros no tengan tan cuesta arriba resolver alguna dificultad?

Esta es mi primera entrada y espero que la disfruten.

La pesadilla de todo desarrollador, trabajar con elementos globalizados como fechas y números con decimales, como todos bien saben este siempre es un tema que siempre trae algún que otro problema y que incluso puede quitar horas o días resolverlo, lo bueno es que existen miles de soluciones, algunas requieren líneas de código otras hacer ajustes o adicionar "fixes" que permitan hacer caminar el código de una forma aceptable y dentro de los estándares.

Un día me tocó trabajar con una aplicación que aceptara valores decimales, con la adición de que acepte decimales con punto o con coma dependiendo del idioma seleccionado. Con esto en mente comenzó mi calvario (uno que tenía años sin toparme).

Una de las soluciones (muy válida por cierto) era crear un custom model binder, el model binder debe (o debería) adaptarse a la cultura que actualmente posea la página, en mi site poseo dos: uno para fechas y el otro para decimales, pero, desafortunadamente funciona solo para los Modelos, en muchos casos para formatearlos y mostrarlos en la vista de una forma válida a la cultura que esté en el site. De igual manera es algo que debería ser implementado y acá les dejo el enlace para los que quieran ir adelantando este paso, les aseguro, les hará falta, pueden ver el enlace ACÁ. Claro está si desean que haga un post con esta información ya digerida y que sea un poco más fácil su comprensión pueden decirlo sin problemas, no tendría inconveniente alguno en dedicar un tiempo a esto.

Ahora bien, vamos al tema que nos atañe en este blog, como decía, me encontraba con mi misión cuando noto que el site pese a tener región local (Español - Venezuela) o al menos eso creía, me seguía dando error en el validador de la vista cuando colocaba una coma como separador decimal, ¿Que podía estar pasando? Pues la respuesta era muy sencilla, el viejo y nunca bien ponderado: validador Unobtrusive.

Bien googleando un poco conseguí una solución, no muy elegante, pero si efectiva, hacer un fix para el jquery.validate.js, pero no os asustéis, no hay modificación del código acá, recuerden que cada vez que alguien toca el jquery.validate.js un desarrollador muere. en este caso creé un fix para el jquery.validate.js, un pequeño archivo adicional que para mí uso personal y por baja de cafeína llamé jQueryFixes.js.

Esta solución la tomé de acá los que deseen por favor pueden echar un vistazo. Este post lo quise hacer ya que adiciono algunos detalles que el autor original obvió por alguna que otra razón imagino.

Bien,  mi archivo jQueryFixes luce de esta manera:



A simple vista el prefiere convivir con Dios y con el Diablo, es decir, con separadores de decimales de comas y puntos. Lo cual para mi funciona perfecto. Pero acá no acaba todo, adicionalmente hay que hacer cierta brujería para que este fixer sea tomado en cuenta y funcione.

Existe un señor llamado BundleConfig que se encuentra en esta ruta: App_Start\BundleConfig.cs, este señor es el encargado entre otras cosas de agrupar (por así decirlo) por funcionalidad los scripts de jquery, hay uno para validaciones (y si no existe deberían crearlo) este en particular luce así:



Como notarán ya tiene mi jQueryFixes adicionado, noten además que está de último, esto es intencional ya que jquery tiene la extraña costumbre de sobrescribirse, si coloco el jQueryFixes adelante del jquery.validate, simplemente las funcionalidades del jQueryFixes serán ignoradas.

Como último paso validen que el bundle esté invocado en las vistas. Preferiblemente en el _Layout o página maestra/principal de su site mediante el script:



¡Espero que esto les haya sido de utilidad y ahorren algunos dolores de cabeza, Happy coding!

Comentarios

Entradas populares de este blog

Seguridad en ASP.Net Identity 2.0 con Webforms Parte 1

¡Saludos colegas desarrolladores y afines! En esta ocasión quiero compartir con Ustedes un pequeño tutorial para trabajar con ASP.Net Identity 2.0 en Webforms. Este creo que será quizás uno de los más complicados de hacer, así que tenedme paciencia. Planeo hacer de esta entrada la primera de varias partes. Como siempre me gusta indicar de donde me basé para escribir el post y fue de ACÁ  hay que dar el reconocimiento a la autora original: Raquel Soares De Almeida, es lo justo, claro yo simplemente digiero un poco el post y lo entrego a Ustedes con algunos detalles que el autor original pudo obviar por razones diversas. En este post en particular voy a ir a lo básico, crear el proyecto desde cero. 1.- Comenzamos con el clásico menú Archivo -> Nuevo -> Proyecto. 2.- Continuamos con la siguiente pantalla donde simplemente seleccionamos bajo la opción de plantillas a la izquierda Visual C#, luego Web y por último ASP.Net Web Forms Application (...

Seguridad en ASP.Net Identity 2.0 con Webforms Parte 2 (Owin el primo raro de Identity)

Este post es la segunda parte de una serie que planeo dedicar a ASP.Net Identity 2.0, como el post anterior este post está basado en ÉSTE  y fue creado por: Raquel Soares De Almeida. La razón de hacer una recopilación de este tema basado en algo ya publicado es que el post original esta en Ingles y quizás a algunos se le complique por la barrera del idioma, otra razón es que yo adiciono pequeños detalles que considero necesario reflejar y lo último es que son necesarias estas dos primeras partes para futuras publicaciones que verán acá prontamente, como aplicar filtrados por roles y asignar roles a usuarios, con esto aclarado comencemos nuestro post. Todos tenemos un primo raro que es algo excéntrico, Identity tiene el suyo y tiene hasta nombre, se llama Owin, el primo Owin.  El primo Owin es una capa intermedia basada en cookies mediante forms. Realmente es muy pero muy interesante, Owin combinado con Identity hacen muy bien la tarea de darnos la seguridad ne...