Pero bueno, centrándonos en ASP.NET MVC 4, se trata de un adelanto de lo que ya se nos avanzó en el Roadmap del producto, y que se ha distribuido en dos paquetes distintos: uno para Visual Studio 2010, y otro para el flamante Visual Studio 11 Developer Preview, también lanzado durante el Build. Ambos pueden descargarse a través de Web Platform Installer, o desde los enlaces proporcionados en esta página.
Este post vamos a dedicarlo a comentar algunas de las cosas que me han ido llamando la atención durante los primeros paseos por el producto. Y ojo, que se trata de una versión muy preliminar: puede tener fallos, cambiar conforme vayamos aproximándonos a la versión final, o incluso hay características que podrían desaparecer.
Por ejemplo, en el caso de la distribución para Visual Studio 2010, no debería interferir con otras versiones del producto instaladas, por lo que deberíais poder probarla en vuestra máquina habitual sin miedo a que os rompa nada. Sin embargo, sí que me ha dado algún problemilla al compilar proyectos MVC 3 existentes, puesto que se introducían dependencias a la versión 2 de
System.Web.Webpages
(distribuida con MVC 4), pero vaya, nada que no pueda solucionarse en un par de minutos retocando las referencias del proyecto.Publicado por José M. Aguilar a las 10:17 a. m.
Etiquetas: asp.net, aspnetmvc, desarrollo, novedades
Espero que te resulten interesantes. :-)
- New Features for Web Development in Visual Studio 11 Developer Preview
Microsoft Web development tools - Tutorial: build a Mobile Website with ASP.NET MVC 4 and jQuery Mobile.
Vía Scott Hanselman - Get the scoop on the ASP.NET 4.5, ASP.NET MVC 4, ASP.NET Web Pages 2, and Visual Studio 11 Developer Previews
Jon Galloway - ASP.NET MVC 4 Developer Preview Released
Phil Haack - Probando jQuery en el escritorio de Windows 8
Gonzalo Pérez - Javascript no es tu enemigo: Patterns For Large-Scale JavaScript Application Architecture
Addi Osmani, vía Marc Rubiño - [ASP.NET vNext] Model Binding: Actualizando datos (Ya tenemos Data Annotations!)
Luis Ruiz - Estudiando el diseño de jQuery paso a paso
Carlos Benítez - Sync Framework now Open Source.
Eric Golpe - [ASP.NET vNext] Model Binding: Filtrando datos
Luis Ruiz Pavón - Volatile fields in .NET.
BlackWasp - EF vNext-Migrations - I
Unai Zorrilla - ¡Feliz día del programador!
Wikipedia - [Tip] Intellisense entre ficheros .Js
Marc Rubiño - Usando SQL Server Table-Valued Parameters en C# (mediante un Custom Iterator)
Lluis Franco - [WebCast] Mecanismos de validación en ASP.MVC 3
AUGES - Dictionary of Algorithms and Data Structures.
National Institute of Standards and Technology - Evento de ADO.NET en Second Nug.
Omar del Valle - C#/.NET Little Wonders: The String Split() and Join() methods.
James Michael - Simulating Function Overloading in #JavaScript
Joe Stagner - ¿Realmente emerge el diseño con TDD?
Josep Maria Camps. - ASP.NET page methods are only as secure as you make them
Dave Ward - Leer variables Session desde una capa de Negocios
Jesús Velasco, vía Omar del Valle.
Y no olvides que puedes seguir esta información en vivo y en directo desde Variable not found en Facebook, o a través de Twitter.
Publicado en: Variable not found
Pues bien, resulta que IE9 trae de fábrica una herramienta que nos permite reformatear el código script de una página para hacerlo más legible. Yo no lo conocía, así que aquí lo pongo por si puede ser de utilidad para alguien más.
Lo único que hay que hacer es acceder a la pestaña “Script” de las Developer Tools, desplegar el menú de herramientas y marcar la opción “Formato Javascript”:
Y ahí lo tenemos:
Obviamente no hace milagros; si se han utilizado técnicas de ofuscación o se han modificado los nombres de funciones y variables vamos a seguir teniéndolos igual, pero algo es algo…
Publicado en: Variable not found.
Publicado por José M. Aguilar a las 9:29 a. m.
Etiquetas: depuración, desarrollo, ie, javascript, trucos
A raíz de dicho post, el amigo Héctor S. (¡gracias!) me envió una interesante pregunta: ¿por qué no utilizar la anotación
System.ComponentModel.DataAnnotations.
EnumDataType
para ello? Y la respuesta corta es: pues también se podría. Con sus particularidades, pero sería posible controlar los valores de entrada a un
enum
usando esta anotación.Empecemos por el principio.
EnumDataTypeAttribute
es una anotación introducida en .NET 4 que nos permite indicar que una propiedad (no necesariamente de tipo enum
) admite exclusivamente valores definidos en un enumerado. Mejor lo vemos con algo de código: public enum Sexo
{
Hombre = 1,
Mujer = 2
}
[EnumDataType(typeof(Sexo))]
public int Sexo { get; set; }
En el ejemplo anterior observamos una propiedad
Sexo
de tipo int
, lo que le permite virtualmente alojar cualquier valor entero posible. Sin embargo, el hecho de decorarla con el atributo EnumDataTypeAttribute
y asociarla a la enumeración Sexo
hará que en la validación de la entidad su valor sea considerado incorrecto si éste no pertenece a los permitidos en ella, en este caso, 1 y 2.Su uso es interesante, por ejemplo, como método para acercar representaciones de la información. Por ejemplo, si la propiedad
Sexo
está mapeada hacia un campo de base de datos, es bastante habitual que éste sea de tipo entero, por lo que el hecho de declararla en la entidad como int
facilita el movimiento de datos entre uno y otro. Al decorarla con EnumDataType
lo que hacemos simplemente es asegurar que contendrá un valor correcto conforme al enumerado, pero ojo, siempre que la entidad sea validada considerando sus anotaciones (como ocurre durante el binding).Y volviendo al tema del post, entonces, ¿por qué no utilizamos este método para asegurar la validez de los datos en el post al que hacía referencia, en lugar de montar un binder personalizado?
Pues el motivo principal sería la pereza. Realmente, me parece demasiado trabajoso el tener que decorar cada propiedad
enum
del modelo con una declaración tan redundante como la siguiente: public class Persona
{
public string Nombre { get; set; }
[EnumDataType(typeof(Sexo))]
public Sexo Sexo { get; set; }
...
}
A ver, si estoy declarando una propiedad de tipo
Sexo
, me resulta pesado tener que decirle algo más arriba que ésta es un tipo de datos enumerado de tipo Sexo
.Pero bueno, salvando este incómodo detalle,
EnumDataType
es una buena fórmula para controlar la corrección de los valores de entrada, y sobre todo muy cómoda si la propiedad parámetro a actualizar es de un tipo no enum
, como un int
:. [EnumDataType(typeof(Sexo))]
public int Sexo { get; set; }
Su uso aporta, además, otras posibilidades interesantes. Por ejemplo, sería posible crear editores personalizados sobre el tipo
int
que, basándose en este atributo, mostraran a nivel de vista desplegables u otros controles de selección de forma automática.Es importante tener en cuenta que, a diferencia de mi enfoque, la comprobación del atributo se realiza durante el proceso de validación, que es posterior al binding en sí. La ventaja de esto es que se integra de forma natural en dicho proceso (por ejemplo, ModelState.IsValid retornará falso si hemos intentado introducir un "3" en Sexo), pero también pueden producirse errores previos generados por el propio binder si no es capaz de realizar la transformación de forma automática (por ejemplo, al intentar un valor textual no presente en la enumeración, como 'Gato'), que de la otra forma sí sería posible controlar.
Publicado en: Variable not found.
- Discriminar acciones según el nombre de los parámetros, por Pablo
Fecha: 09/09/2011 - OpenRa: clon open source del clásico Command&Conquer escrito en C#.
Fecha: 08/09/2011 - MonoDevelop 2.6 is out, by Miguel de Icaza.
Fecha: 08/09/2011 - Serie "Javascript OMGs!", by Mike Taulty.
Fecha: 08/09/2011 - How to write a small game using HTML5 and Javascript
Fecha: 08/09/2011 - Extending the ASP.NET error page (show me the SQL edition), vía Pablo Iglesias.
Fecha: 08/09/2011 - Creating Multiple Javascript Objects when using the Revealing Module Pattern, by Dan Wahlin.
Fecha: 08/09/2011 - Best Tools for Professional Javascript Development, by Joe Stagner
Fecha: 08/09/2011 - Entity Framework Code First Migrations Alpha 2 released.
Fecha: 07/09/2011 - TinyMCE HTML Text Editior & ASP.NET MVC - Setting It Up Has Become Easy With Nuget
Fecha: 07/09/2011 - NerdDinner 3.0 released with ASP.NET MVC 3.0, Razor, HTML5, jQuery Mobile, etc...
Fecha: 07/09/2011 - Adding Export Capabilities to the Razor WebGrid, by Mike Ceranski
Fecha: 06/09/2011 - SQL Server Compact Toolbox for Visual Studio 2010 now available, vía José Miguel Torres Fecha: 06/09/2011
- Model Binding: Obteniendo datos, por Luis Ruiz Pavón
Fecha: 06/09/2011 - ASP.NET vNext Series - Model Binding SelectMethods
Fecha: 06/09/2011 - ASP.NET MVC Mobile ViewEngines available on NuGet
Fecha: 05/09/2011 - Synchronisation in Parallel Loops.
Fecha: 05/09/2011 - Gestionando la memoria Cache en ASP.NET MVC, por Sebis.
Fecha: 05/09/2011 - CSS Tricks and the Alternate Universe of Graphics Primitives, by K. Scott Allen.
Fecha: 05/09/2011 - Using Lucene.NET search engine library in .NET applications.
Fecha: 05/09/2011 - Recibir resultados de una página en otra: Transferencias y Cross-page posting, por José Manuel Alarcón.
Fecha: 05/09/2011 - How to Navigate the HTML5 Video Maze.
Fecha: 05/09/2011 - Offline web applications: a working example.
Fecha: 05/09/2011 - Interesante comparación de herramientas de logging, vía Jorge Serrano.
Fecha: 05/09/2011
Publicado en: Variable not found