- Hanselman explora distintas estrategias de acceso a datos en Nerdinner (EF, L2Sql, ADO, NHibernate).
Fecha: 22/05/2010 - Cómo alertar al usuario antes de que la sesión expire en asp.net Fecha: 22/05/2010
- Ejemplo de uso de formatos de fecha localizados a través de un custom ModelBinder.
One of the great things about the way in which the Microsoft ASP.NET MVC Framework is being developed is the fact that the team are publishing the source code as they go along. This makes it very simple ...
Fuente: weblogs.asp.net | Fecha: 22/05/2010 - RAMMap, una nueva herramienta de MS-SysInternals.
Have you ever wondered exactly how Windows is assigning physical memory, how much file data is cached in RAM, or how much RAM is used by the kernel and device drivers? RAMMap makes answering those questions easy. ...
Fuente: technet.microsoft.com | Fecha: 21/05/2010 - Utilización de Reflexil, paso a paso. Muy interesante.
Una de las ventajas de los compiladores que generan código intermedio es que las aplicaciones resultantes (ejecutables y librerías dinámicas) pueden desensamblarse con facilidad, reconstruyendo el código en su lenguaje original. ...
Fuente: http://www.lobosoft.es/ | Fecha: 21/05/2010 - Solución del error "'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine" en ASP.NET corriendo en máquinas de 64 bits.
In my latest ASP.NET project, I refresh the sample data using an Excel spreadsheet from the client. After upgrading to Windows Server 2008 R2, I suddenly discovered this error:
Fuente: weblogs.asp.net | Fecha: 21/05/2010 - Utilización de MEF como mecanismo de enlace de plugins en aplicaciones ASP.NET MVC.
Scott Hanselman on Programming, User Experience, The Zen of Computers and Life in General
Fuente: http://www.hanselman.com/ | Fecha: 20/05/2010 - Ayende anuncia el lanzamiento de RavenDb
I have been talking about this for what seems like forever (over two years, if you really care to know), but it is finally out.
Fuente: ayende.com | Fecha: 20/05/2010 - Buenas prácticas para el tratamiento de excepciones en aplicaciones ASP.NET.
Helps you create functional user interfaces
Fuente: http://www.jankoatwarpspeed.com/ | Fecha: 20/05/2010 - Inicio de una serie con muy buena pinta sobre Code Contracts.
This blog post is part of a series concerning Microsoft Code Contracts. For a complete series directory, please refer to the following list. Articles without a link will be published soon. Part 01 - Introduction Part 02 - Preconditions & Postconditions
Fuente: devjourney.com | Fecha: 20/05/2010 - Los problemas con ASP.NET más frecuentemente consultados al equipo de soporte de Microsoft.
Scott Hanselman on Programming, User Experience, The Zen of Computers and Life in General.
Fuente: http://www.hanselman.com/ | Fecha: 20/05/2010 - Atributos en ASP.NET MVC 2.
Fuente: dotnetslackers.com | Fecha: 19/05/2010 - VSNewFile, un curioso plugin para VS2k8 y 2k10 para añadir rápidamente archivos a un proyecto.
Fuente: weblogs.asp.net | Fecha: 19/05/2010 - ¡Ya lo tenemos! ¡Visual Studio 2010 en castellano!
Visual Studio 2010 incorpora nuevas características mejoradas que hacen que todo el proceso de desarrollo sea más sencillo, desde el diseño a la implementación.
Fuente: http://www.microsoft.com/ | Fecha: 18/05/2010 - Lanzadas las herramientas Silverlight para VS2010.
Dan Wahlin's WebLog
Fuente: weblogs.asp.net | Fecha: 18/05/2010 - Ayende analiza el acceso a datos de MVC Music Store con EF Profiler.
I thought that it would be a good idea to take EF Prof for a spin one the sample MVC Music Store. It can illustrate some things about EF Prof and about the sample app.
Fuente: ayende.com | Fecha: 18/05/2010 - Creación de un ViewEngine personalizado con soporte para temas.
All good blogging platforms have theme support. So while working on WeBlog I initially implemented theme support by using a base controller class. The base controller class was responsible for dynamically setting the master page at runtime. ...
Fuente: http://www.codecapers.com/ | Fecha: 18/05/2010 - Cómo abrir los enlaces externos en una nueva ventana utilizando jQuery.
The site covers technical articles on Microsoft.NET, ASP.NET, MVC, C#, VB.NET, jQuery, AJAX, JavaScript, Silverlight, LINQ, VSTS, .NET Interview Questions, Windows Forms, Expression Web, Office 2007, Vista and related technologies
Fuente: http://www.dotnetcurry.com/ | Fecha: 18/05/2010 - Tres puntos de extensibilidad de ASP.NET 4 poco conocidos.
ASP.NET 4 introduces a few new extensibility APIs that live the hermit lifestyle away from the public eye. They’re not exactly hidden - they are well documented on MSDN - but they aren’t well publicized. It’s about time we shine a spotlight on them.
Fuente: haacked.com | Fecha: 17/05/2010 - Método extensor para conocer el área, controlador y acción actual, por ejemplo, para maquetar menús sensibles a la ubicación actual del usuario.
Have you ever needed to detect what part of the application is currently being viewed? This might be a bigger issue if you write a lot of shared/partial views or custom display or editor templates. Another ...
Fuente: geekswithblogs.net | Fecha: 15/05/2010 - Music Store: Tutorial y aplicación de ejemplo de ASP.NET MVC 2
All posted code is published under Public Domain license unless otherwise stated. All content is published under a Creative Commons Attribution License
Fuente: weblogs.asp.net | Fecha: 14/05/2010 - Estensión a T4MVC para renderizar vistas parciales.
T4MVC is a helpful template for your MVC projects. You can follow the directions on David’s blog to get started; that should give you a quick understanding of what T4MVC is capable of. If you’ve yet to ...
Fuente: http://www.weirdlover.com/ | Fecha: 13/05/2010 - Utilización de FCKEditor con ASP.NET MVC.
Stefan Kamphuis of Giraffe IT on DotNetNuke, asp.net, Microsoft, C#, VB.Net, and more...
Fuente: msmvps.com | Fecha: 13/05/2010 - ASP.NET MVC y Webforms en el mismo proyecto, o cómo mezclar churras con merinas.
One of the nice things about ASP.NET MVC and its older brother ASP.NET WebForms is that they are both built on top of the ASP.NET runtime environment. The advantage of this is that, you can still run them side by side even though MVC and WebForms are different frameworks.
Fuente: weblogs.asp.net | Fecha: 11/05/2010 - Interesante serie de posts sobre ASP.NET MVC y jQuery.
This is me blogging the development of a project, codenamed 'Raven' for the company which gainfully employs me. I program on the .NET stack, am lovin' Windows 7 and Visual Studio 2010. Truth be told, the only ones that call me 'Mister James' are the three- and four-year-olds at Sunday school. ...
Fuente: theycallmemrjames.blogspot.com | Fecha: 11/05/2010 - Fijación de proyectos y soluciones a la lista de elementos abiertos recientemente en Visual Studio 2010..
ASP.NET, Visual Studio, ASP.NET 2.0, .NET
Fuente: weblogs.asp.net | Fecha: 11/05/2010 - Grid con paginación, ordenación y filtro utilizando componentes de MVC Contrib.
This post walks you through creating a UI for paging, sorting and filtering a list of data items. It makes use of the excellent MVCContrib Grid and Pager Html UI helpers. A sample project is attached at the bottom.
Fuente: weblogs.asp.net | Fecha: 10/05/2010
Publicado en: Variable not found
Publicado por José M. Aguilar a las 11:46 p. m.
Etiquetas: enlaces
Debe ser por eso que me divierten y me identifico tanto con los posts que enumeran estos hábitos tan comunes, como el clásico las “20 respuestas más utilizadas por los desarrolladores cuando sus programas no funcionan”, que pulula por la red desde hace muchos años y del que he encontrado versiones en todos los idiomas, por lo que soy absolutamente incapaz de citar la fuente exacta.
El hecho es que justo en el momento en que se nos informa de que algo ha fallado en una de nuestras aplicaciones, el cerebro comienza a trabajar aceleradamente en busca de una
Y es que, al final, seguro que todos acabamos diciendo aproximadamente lo mismo…
20. “¡Qué raro!”. Primera regla del desarrollador experimentado: mostrar asombro cuando algo falla. Alguien que no se extrañe de la aparición de un error puede aparentar ser bastante mediocre. Hay quien incluso, para acentuar más aún su profesionalidad, añade “¡Imposible!”.
19. “Nunca había pasado antes”. Por si no queda claro con el conjunto de exclamaciones anteriores, apostillar con esta declaración deja claro que os encontráis ante algo insólito. Esto, además, puede ser útil para despertar el espíritu aventurero en tu interlocutor, y hacerlo partícipe en el enfrentamiento a lo desconocido que estáis a punto de comenzar.
18. “Ayer funcionaba”. Busca un soporte sólido para aferrarte, una referencia fiable como esa. Decir que ayer funcionaba es una afirmación ideal: difícil de probar, y si estás ante alguien cándido e inocente, será suficiente para convencerlo de que el error se ha generado hoy mismo, como por arte de magia.
17. “¿Cómo es posible?”. Otra oportunidad para demostrar tu asombro, que además surte mayor efecto si lo sigues con una explicación que tu interlocutor no sea capaz de entender: “cuando I,J,K y no M,N,L es imposible que X,Y,Z”.
16. “Debe ser un problema hardware”. Segunda regla del desarrollador experimentado: si la cosa se complica, puedes ir abriendo el camino a nuevas posibilidades, alejadas de nuestra responsabilidad. Nada podemos hacer contra fallos en la máquina, nosotros sólo entendemos de software. De hecho, si somos incapaces de dar con el problema (y por tanto incapaces de solucionarlo), echar las culpas al metal es una vía de salida de lo más airosa.
15. “¿Qué hiciste mal para que fallara?”. Duda siempre de la lucidez del usuario. Si lo acusas de ser un zoquete tendrá que dedicar su tiempo de proceso a defender su postura, y no a vapulearte como te mereces.
14. “Hay algo raro en tus datos”. Es una variación más ligera del caso anterior; estás descargando responsabilidad sobre el usuario, aunque de forma menos agresiva, pues no es un ataque directo a su persona, sino a los datos que utiliza. Esta fórmula puede ser útil y prudente si, por ejemplo, el usuario del sistema es tu jefe.
13. “¡No he tocado ese módulo en semanas!”. Eso es, deja claro que tú no has tocado nada, y que por tanto la responsabilidad no es tuya. Si el módulo funcionaba hace un mes y no has tocado nada, está claro que la culpa el del usuario, del entorno, o del propio desgaste, como las ruedas de un coche.
12. “Debes estar utilizando una versión incorrecta”. Esta es una técnica avanzada para aplicar una vez te has percatado, en silencio claro está, de que había un error tuyo en tu aplicación. Acusa al usuario de utilizar una versión antigua del software, y suminístrale la versión correcta, en la que obviamente ya has parcheado el error.
11. “Se trata sólo de una casualidad”. Utiliza el azar como causa de los problemas; es impredecible, incontrolable y misterioso, una cortina de humo ideal para esconder nuestras meteduras de pata.
10. “Uno no puede probarlo todo”. No somos Dioses… quizás estemos muy cerca, pero no lo somos. Esta frase, a utilizar sólo en casos señalados, puede mostrar humildad y apelar a la bondad del interlocutor para disminuir la tensión. O también, puede servir para arremeter contra tu organización, la falta de recursos, de tiempo, etc., que el usuario empatizará y lamentará contigo.
9. “Eso no puede ser la causa del problema”. Sé tajante; aunque tenga razón, no permitas que un usuario listillo te revele el motivo exacto por el que ha fallado tu aplicación, pues nadie la conoce mejor que tú. Si después de usar esta frase confirmas que la causa era la apuntada por este individuo, no lo reconozcas, y utiliza verborrea técnica para desviar la atención a otras causas.
8. “Eso funciona, aunque no lo he probado”. Un desarrollador profesional no necesita probar las cosas para saber que funcionan, eso es cosa de débiles e inseguros. Una afirmación tan rotunda desequilibrará al interlocutor y lo hará dudar de su criterio a la hora de detectar el error, momento que puedes aprovechar para rematar con cualquier otra frase.
7. “Alguien debe haber cambiado mi código”. Otra regla de oro del desarrollador, aunque compartida con otras profesiones: échale las culpas a otro. Una vez demostrado que hay un fallo y que no puedes hacer responsable al usuario, no hay nada mejor que echar la culpa a los compañeros. Y si crees que no es ético, recuerda: ellos también lo harían.
6. “¿Has comprobado si tienes un virus?”. Los virus, esos seres misteriosos que sólo podemos comprender los iniciados y de los que todo el mundo ha oído historias terribles, son también firmes candidatos a salvarnos el trasero cuando la cosa se está poniendo peligrosa. Dado que la respuesta a esta pregunta
5. “Bueno, no funciona, pero mola, ¿eh?”. Ante una encerrona, apela al sentido del humor de tu interlocutor. Intenta detectar algún aspecto positivo del desastre, y preséntalo de forma atractiva para el usuario. ¿Un proceso tarda demasiado? Así tienes más tiempo para estirar los músculos; ¿La aplicación se cierra violentamente? Así puedes apagar antes el equipo e irte a casa; ¿Una BSOD? Fíjate qué fondo de pantalla azul eléctrico tan espectacular te pone el programa cuando falla.
4. “No puedes usar esa versión en tu sistema” Cuando el número de errores sea tan alto que pueda poner en peligro tu credibilidad como profesional, no reconozcas haberlos cometido; utiliza motivos estructurales como el hardware, los virus, o el versionado de sistemas para hacerles ver que eres totalmente inocente.
3. “¿Por qué quieres hacerlo así?” Una posibilidad muy socorrida es a veces instruir al usuario para que realice las tareas justo de la forma en que la aplicación funciona correctamente, censurándole rápida y tajantemente los intentos de salirse del camino marcado. A veces es más fácil adaptar el usuario a la aplicación que viceversa.
2. “¿Dónde estabas cuando el programa falló?” Ideal para aplicaciones que funcionan como procesos por lotes, o para intentar culpar al usuario de su ausencia en un momento vital como en el que se produjo el problema. Sobre todo si sabemos que el usuario es tendente a despistarse, esta puede ser un arma realmente interesante.
1. “No es un error, es que el programa funciona así”. Aprovecha la delgada línea que separa un bug de una feature. Esta técnica avanzada te permitirá desviar la atención hacia las personas que decidieron las funcionalidades, recogieron los requisitos, o validaron el software, pero nunca hacia el desarrollador que simplemente siguió las instrucciones.
Y por último, la frase más utilizada sin duda por los desarrolladores:
0. “¡En mi máquina funciona!” Desconcierta al interlocutor, y queda como debes, por encima de todos. El software funciona en entornos controlados como el tuyo, propios de un experto, donde todo está perfectamente en orden y lejos del alcance de las manazas del usuario final.
Eso sí, hay que estar preparados para una respuesta como la siguiente:
Publicado en: Variable not found
- Método extensor para conocer el área, controlador y acción actual, por ejemplo, para maquetar menús sensibles a la ubicación actual del usuario.
Have you ever needed to detect what part of the application is currently being viewed? This might be a bigger issue if you write a lot of shared/partial views or custom display or editor templates. Another ...
Fuente: geekswithblogs.net | Fecha: 15/05/2010 - Music Store: Tutorial y aplicación de ejemplo de ASP.NET MVC 2
All posted code is published under Public Domain license unless otherwise stated. All content is published under a Creative Commons Attribution License
Fuente: weblogs.asp.net | Fecha: 14/05/2010 - Estensión a T4MVC para renderizar vistas parciales.
T4MVC is a helpful template for your MVC projects. You can follow the directions on David’s blog to get started; that should give you a quick understanding of what T4MVC is capable of. If you’ve yet to ...
Fuente: http://www.weirdlover.com/ | Fecha: 13/05/2010 - Utilización de FCKEditor con ASP.NET MVC.
Stefan Kamphuis of Giraffe IT on DotNetNuke, asp.net, Microsoft, C#, VB.Net, and more...
Fuente: msmvps.com | Fecha: 13/05/2010 - ASP.NET MVC y Webforms en el mismo proyecto, o cómo mezclar churras con merinas.
One of the nice things about ASP.NET MVC and its older brother ASP.NET WebForms is that they are both built on top of the ASP.NET runtime environment. The advantage of this is that, you can still run them side by side even though MVC and WebForms are different frameworks.
Fuente: weblogs.asp.net | Fecha: 11/05/2010 - Interesante serie de posts sobre ASP.NET MVC y jQuery.
This is me blogging the development of a project, codenamed 'Raven' for the company which gainfully employs me. I program on the .NET stack, am lovin' Windows 7 and Visual Studio 2010. Truth be told, the only ones that call me 'Mister James' are the three- and four-year-olds at Sunday school. ...
Fuente: theycallmemrjames.blogspot.com | Fecha: 11/05/2010 - Fijación de proyectos y soluciones a la lista de elementos abiertos recientemente en Visual Studio 2010..
ASP.NET, Visual Studio, ASP.NET 2.0, .NET
Fuente: weblogs.asp.net | Fecha: 11/05/2010 - Grid con paginación, ordenación y filtro utilizando componentes de MVC Contrib.
This post walks you through creating a UI for paging, sorting and filtering a list of data items. It makes use of the excellent MVCContrib Grid and Pager Html UI helpers. A sample project is attached at the bottom.
Fuente: weblogs.asp.net | Fecha: 10/05/2010
Publicado en: Variable not found
Por ejemplo, existe un curioso comportamiento del juego de herramientas de validación en cliente y servidor en lo relativo a la introducción de decimales en el Modelo. Imaginemos la siguiente entidad de datos, con sus correspondientes anotaciones:
public class Producto
{
[Required(ErrorMessage="*")]
public string Nombre { get; set; }
[DisplayName("Peso (Kg.)")]
[Range(0.1, 10, ErrorMessage="Entre {1} y {2}")]
[Required(ErrorMessage="*")]
public double Peso { get; set; }
}
Centrándonos en la propiedad
Peso
, la intención de sus anotaciones está bastante clara: queremos que sea de introducción obligatoria, y que su valor se encuentre en el rango entre 0,1 y 10 kilogramos.Creamos ahora un formulario de introducción de datos para dicha entidad utilizando como base el generado por defecto por Visual Studio. El código resumido de la vista es el siguiente:
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<script src="/Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>
<h2>Create</h2>
<% Html.EnableClientValidation(); %>
<% using (Html.BeginForm()) {%>
... // Omitido
<% } %>
</asp:Content>
Si utilizamos exclusivamente la validación en servidor no habrá problema, pero si, como en el código anterior, activamos en ella la validación en cliente, podemos encontrarnos con un curioso y problemático escenario debido a la falta de sincronización entre las culturas en cliente y en servidor.
Sintomatología
Si en el campo Peso introducimos un entero, por ejemplo un “2”, todo funciona correctamente. El validador en cliente dejará pasar el valor, y en servidor se realizará la conversión de dicho valor adouble
sin problema.Sin embargo, al intentar introducir un valor no entero como “1,23” comienza la fiesta. Si utilizamos como separador de decimales una coma, el validador en cliente no nos permitirá hacer un submit del formulario, quedándonos atrapados en esta capa:
Si en cambio utilizamos como separador un punto, por ejemplo “2.5”, la validación en cliente considerará que el valor decimal es correcto, y permitirá el envío de los datos del formulario. Sin embargo, el servidor intentará obtener el valor
double
utilizando el formato asociado a la cultura actual, en la que el punto no es un carácter válido de separación, por lo que decidirá que el estado del Modelo es inválido, y nos enviará de vuelta al formulario:(Por cierto, hace unas semanas comenté por aquí cómo modificar los mensajes de validación por defecto en ASP.NET MVC 2, como el error mostrado en la captura anterior).
En resumen: no podemos continuar si utilizamos como separador decimal la coma (primer caso), ni tampoco si utilizamos el punto (segundo caso). Literalmente, estamos en un callejón sin salida.
Diagnóstico
El problema se debe básicamente a que los scripts de validación están utilizando únicamente la cultura “en-US”, en la que el carácter de separación decimal es el punto. Es decir, por defecto se utilizan los formatos de fecha y numéricos de la cultura inglesa/americana, y no existe ningún punto en el código de las librerías de scripting MicrosoftAjax o MicrosoftMvcValidation donde se modifiquen estos parámetros.Sin embargo, el tratamiento en servidor se realiza bajo la cultura definida en el hilo de ejecución actual, en este caso la correspondiente a “es-ES”, en la que las comas son los separadores entre la parte entera y la decimal.
Esto es fácil de comprobar introduciendo al final de la vista:
<p>
Cultura en servidor:
<%= System.Threading.Thread.CurrentThread.CurrentCulture.Name %>
</p>
<script type="text/javascript">
alert("Cultura en cliente: " + Sys.CultureInfo.CurrentCulture.name);
</script>
Tratamiento
Es posible que haya formas más sencillas para solucionar esta cuestión, pero de momento la única que he encontrado para sincronizar las culturas es forzar en el lado cliente la utilización de las opciones culturales que estén siendo consideradas en servidor.Para ello, necesitamos asignar durante la inicialización de la página un objeto de tipo CultureInfo a la propiedad Sys.CultureInfo.CurrentCulture. Este objeto contiene los formatos numéricos y de fecha que serán utilizados en las operaciones de conversión llevadas a cabo desde las librerías de scripting Microsoft Ajax, y necesita dicha información durante su instanciación, como en el siguiente ejemplo:
<script type="text/javascript">
var ci = {
"name": "es-ES",
"numberFormat": {información de formato numérico},
"dateTimeFormat": {información de formato de fecha y hora}
};
Sys.CultureInfo.CurrentCulture = Sys.CultureInfo._parse(ci);
</script>
Sin embargo, esto es algo más complejo de lo que podría parecer en un principio. El formato numérico contiene información sobre los separadores de millares, decimales, formas de representar negativos, monedas, dígitos, etc; de la misma forma, respecto a las fechas, es necesario suministrar el formato, nombre de meses, días de la semana, etc. Sin duda, un trabajo demasiado duro para tener que hacerlo a mano.
Por suerte, la representación de los formatos de números y fechas utilizado por las librerías de scripting de Microsoft son idénticas en cliente y servidor, por lo que podemos serializar como JSON los objetos
Thread.CurrentThread.CurrentCulture.NumberFormat
y Thread.CurrentThread.CurrentCulture.DateTimeFormat
y utilizar el resultado para crear el objeto CultureInfo
:<%
JavaScriptSerializer jss = new JavaScriptSerializer();
var cultureInfo = Thread.CurrentThread.CurrentCulture;
string name = cultureInfo.Name;
string numberFormat = jss.Serialize(cultureInfo.NumberFormat);
string dateFormat = jss.Serialize(cultureInfo.DateTimeFormat);
%>
<script type="text/javascript">
var ci = {
"name": "<%= name %>",
"numberFormat": <%= numberFormat %>,
"dateTimeFormat": <%= dateFormat %>
};
Sys.CultureInfo.CurrentCulture = Sys.CultureInfo._parse(ci);
</script>
Pero está claro que no tiene demasiado sentido repetir el código anterior a lo largo y ancho de las vistas de edición de datos donde queramos activar la localización. Seguro que podemos mejorar esto… ;-)
Medicina genérica: El helper Html.EnableLocalizedClientValidation()
Vamos a crear un helper que realice por nosotros estas tareas de la forma más sencilla posible.Html.EnableLocalizedClientValidation()
encapsula el comportamiento del helper estándar EnableClientValidation()
, y añade los scripts de inicialización de las opciones culturales comentados anteriormente. Su uso será como se muestra a continuación:<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>
<%= Html.EnableLocalizedClientValidation() %>
<h2>Create</h2>
<% using (Html.BeginForm()) { %>
// .. El resto del código de vista
La única diferencia respecto al método habitual es que estamos utilizando una expresión de salida
<%= %>
, y que el helper invocado es EnableLocalizedClientValidation()
.El código del helper es:
using System.Text;
using System.Web.Script.Serialization;
using System.Threading;
namespace System.Web.Mvc
{
public static class Extensions
{
public static MvcHtmlString EnableLocalizedClientValidation(this HtmlHelper html)
{
// Habilitamos la validación en cliente
html.EnableClientValidation();
// Obtenemos la información de la cultura actual
JavaScriptSerializer jss = new JavaScriptSerializer();
var cultureInfo = Thread.CurrentThread.CurrentCulture;
string name = cultureInfo.Name;
string numberFormat = jss.Serialize(cultureInfo.NumberFormat);
string dateFormat = jss.Serialize(cultureInfo.DateTimeFormat);
// Generamos el código
StringBuilder sb = new StringBuilder();
sb.Append("<script type=\"text/javascript\">");
sb.AppendLine("var ci = {");
sb.AppendLine(" \"name\": \"" + name + "\",");
sb.AppendLine(" \"numberFormat\": " + numberFormat + ", ");
sb.AppendLine(" \"dateTimeFormat\": " + dateFormat);
sb.AppendLine("};");
sb.AppendLine("Sys.CultureInfo.CurrentCulture = Sys.CultureInfo._parse(ci);");
sb.AppendLine("</script>");
return MvcHtmlString.Create(sb.ToString());
}
}
}
Puedes descargar el código fuente desde mi SkyDrive.
Una última anotación: terminando de escribir este post, observo que el gran Phil Haack (PM de ASP.NET MVC) acaba de publicar una entrada comentando el mismo tema, y enfocando la solución desde otra óptica. Una lástima que no lo haya publicado antes, me habría ahorrado el tiempo que me ha llevado esta investigación, aunque, en cualquier caso, ha valido la pena para entender un poco más los entresijos del framework.
Publicado en: Variable not found
Hey, ¡estoy en twitter!
El pasado 8 de mayo volvimos a celebrar el aniversario de la publicación del primer post en Variable Not Found, ese blog que comenzó tímidamente hace ya cuatro años, con una declaración de intenciones como la siguiente:
Pretendo firmemente, y suelo ser bastante tenaz en mis propósitos, que este diario recoja todo aquello que me llame la atención y mis reflexiones relativas a la tecnología en general, y al mundo del desarrollo de software en particular.Con mayor o menor frecuencia dependiendo del tiempo libre disponible en cada momento, desde esa fecha he ido publicando por aquí todo aquello que he considerado que podía interesar a alguien más que a un servidor, probablemente unas veces con más acierto que otras, pero, en cualquier caso, siempre con el mismo entusiasmo que el primer día.
Como en otras ocasiones, aprovecho para resumir los distintos periodos por los que hemos ido pasando desde aquél momento.
- Año 1: la travesía del desierto (mayo 2006 - mayo 2007), caracterizado principalmente por ser yo el único visitante (poco más o menos) al blog, por aquellos tiempos disponible a través de la dirección jmaguilar.blogspot.com y con la imagen de una de las plantillas de Blogger.
La siguiente gráfica muestra los primeros meses de vida del blog, donde era extraño superar las tres visitas al día. Esos picos que se ven probablemente sería yo mismo haciendo pruebas:
También es curioso los primeros veinte días sin datos: era tan ignorante que ni siquiera se me ocurrió activar ningún sistema de seguimiento hasta 20 días después de la inauguración oficial de la bitácora :-D
Aprovecho para introducir un mensaje de aliento para los que estéis en esta situación ahora, empezando un blog: no os desaniméis, ni aun viendo este desastre: con un poco de esfuerzo todo puede cambiar. El desierto también tiene su fin.
- Año 2: el despegue (mayo 2007 - mayo 2008), durante el cual se produjeron múltiples novedades, como la adquisición del dominio variablenotfound.com, la difusión de feeds a través de Feedburner, la creación del diseño actual, y la inclusión en agregadores y comunidades como Planeta Código, Planet WebDev y Geeks.ms.
Este segundo año lo acabamos con un incremento del 2.500% en el número de visitas (la verdad, tampoco lo tenía muy difícil al partir casi de cero ;-)), debido en gran parte a algunas avalanchas procedentes de Menéame.
Pero lo que me parecía más increíble era algo a lo que, curiosamente, no había prestado demasiada atención y que, sin embargo ahora, es uno de los parámetros que más valoro: los suscriptores a los feeds. Acabábamos el año con unos increíbles 380 suscriptores.
- Año 3: la consolidación (mayo 2008 – mayo 2009), periodo sin grandes cambios en el que Variablenotfound.com continuó creciendo, aunque no de forma tan espectacular como lo había hecho anteriormente.
Se incrementaron en un 75% el número de visitas procedentes de buscadores, debido a que comenzaba a notarse la antigüedad del blog, el número de referencias externas y su posicionamiento en buscadores, compensando así la práctica ausencia de meneos y otro tipo de avalancha.
Según elinestableinestimable feedburner, los suscriptores a feeds superaron los 600, lo que suponía un aumento casi del 100% respecto al periodo anterior. Impresionante.
Año 4: la variable social (mayo 2009-mayo 2010)
Durante este último año el número de visitantes ha continuado en la misma línea de estabilidad ya lograda en el periodo anterior, sin grandes sobresaltos. Los principales indicadores son:
- Rozamos en total los cien mil usuarios únicos absolutos al año, sumando los visitantes a Variablenotfound.com y a su eco en geeks.ms, Aunque no sea un número altísimo comparado con otros blogs, el carácter vertical y altamente especializado de mis publicaciones hacen que este número sea, en mi humilde opinión, espectacular.
- Sigue aumentando el porcentaje de visitantes procedentes de
Googlebuscadores; y esto a pesar de que la indexación no es especialmente buena… mmm, algún día tendré que mejorar eso. - En términos absolutos, la mayor parte de lectores se conectan desde España. Sin embargo, el mayor incremento se ha producido desde países como México, Argentina, Colombia, Perú o Chile.
- El número de suscriptores a los feeds se acerca al millar… ¡simplemente impresionante! Estas dimensiones eran absolutamente impensables hace unos años, cuando pensaba que un blog con 500 lectores era una auténtica barbaridad, y ni en mis más optimistas previsiones era capaz de imaginar acercarme a este número.
- Como curiosidad, el navegador más utilizado para acceder a los contenidos desde http://www.variablenotfound.com/ es Firefox (47%), frente a Internet Explorer (36%). A través del eco en geeks.ms es al contrario, un 46% Internet Explorer y no llega al 40% Firefox. Otro aspecto algo sorprendente es que el 70% de los lectores del blog todavía utiliza Windows XP.
En la actualidad utilizo Facebook para registrar enlaces a artículos que encuentro cada día y que me parecen interesantes. De hecho, también los publico en el blog en las entradas categorizadas “Enlaces” de cada semana.
Profundizando en la misma línea, me he introducido de lleno en Twitter, que puedo decir que ha supuesto todo un descubrimiento. Aunque todavía soy sólo un aspirante a twitteador de los de verdad, estoy cada vez más integrado e identificado con esta nueva vía de comunicación inmediata. A día de hoy, sigo a 38 personas, y 58 followers escuchan mis gorjeos a diario, lo que me permite conversar con gente estupenda y plasmar impresiones y sensaciones en directo, a la vez que retransmitir por esa vía los enlaces que publico en Facebook.
Por otra parte, durante este último año he tenido ocasión de encontrar los primeros patrocinadores para el blog, lo cual, una vez descartado hacerme millonario con los ingresos de Adsense ;-), suponen al menos la posibilidad de sufragar gastos y darme un caprichillo de vez en cuando.
También, gracias a la difusión conseguida, he tenido el privilegio de probar algunos productos (como NDepend, o BaseKit) cedidos directamente por sus creadores, o acceder a información temprana de algunos sistemas (como el Vodafone Business Place) a través de invitaciones a eventos e información suministrada por los fabricantes.
Pero, como ya he dicho en otras ocasiones, el principal beneficio que sigo obteniendo es intangible. La motivación viene con cada post publicado, que brinda una nueva oportunidad de ampliar conocimientos y compartirlos con objeto de aportar un diminuto granito de arena a la comunidad de desarrolladores.
Y es que no hay mejor recompensa que el hecho de que estéis ahí: cada visita, cada suscriptor al feed, cada seguidor, cada comentario o contacto a través de cualquier vía hacen que continuar trabajando en este proyecto valga la pena.
Muchas gracias a todos, y espero que sigáis por aquí, ayudándome a buscar la variable.
Publicado en: Variable not found.
Publicado por José M. Aguilar a las 11:48 p. m.
Etiquetas: aniversario, autobombo, blogging, variablenotfound, variablenotfound.com
- Contribuciones de MS a jQuery: Templates y Data Linking
ASP.NET, Visual Studio, ASP.NET 2.0, .NET
Fuente: weblogs.asp.net | Fecha: 07/05/2010 - Publicada la versión de T4MVC para VB.NET.
T4MVC is a T4 template that generates strongly typed helpers for ASP.NET MVC. You can download it here, and check out the documention here.Note that T4MVC is the C# version, while T4MVCVB is the VB version.
Fuente: mvccontrib.codeplex.com | Fecha: 06/05/2010 - ¿Están los helpers html mostrando valores incorrectos? Pues va a ser que no... más bien hay que tener algo de cuidado al usarlos en ciertos escenarios.
First things first – oh no they don’t J But it can look like a bug if you’re not used to MVC, so I thought it worth calling out. Scenario Imagine we have a pair of controller actions like this; [ HttpGet ] public ActionResult Index() { var model = new
Fuente: blogs.msdn.com | Fecha: 06/05/2010 - Tuplas en .NET 4: System.Tuple
Fuente: samgentile.com | Fecha: 06/05/2010 - Uso de Display Templates para mostrar datos tabulares en MVC 2.
The ASP.NET MVC2 templates feature is a pretty nice way to quickly scaffold objects at runtime. Be sure to read Brad Wilson’s fantastic series on this topic starting at ASP.NET MVC 2 Templates, Part 1: Introduction.
Fuente: haacked.com | Fecha: 06/05/2010 - Validaciones en cliente ASP.NET MVC 2 con ExtJS.
CodeSmith is a template-based code generating tool. It features a syntax nearly identical to ASP.NET and can generate code for any ASCII based language.
Fuente: community.codesmithtools.com | Fecha: 04/05/2010 - Interesantísima idea: generar los metadatos del Modelo con una plantilla T4. Habrá que buscar un hueco para probarlo :-)
I have been learning about T4 templates recently by looking at the awesome ADO.NET POCO entity generator. By using the POCO entity generator template as a base, I created a T4 template which generates metadata classes for a given Entity Data Model. ...
Fuente: weblogs.asp.net | Fecha: 04/05/2010 - SharpDOM, un nuevo View Engine para ASP.NET MVC, utiliza C# para componer el marcado de las páginas.
Sharp DOM is a view engine for ASP.NET MVC platform allowing developers to design extendable and maintenable dynamic HTML layouts using C# 4.0 language. It is also possible to use Sharp DOM project to ...
Fuente: sharpdom.codeplex.com | Fecha: 03/05/2010 - Materiales de la presentación "High Performance JavaScript" en la jQuery Conference.
A place for conference speakers and attendees to give and receive constructive, thoughtful feedback.
Fuente: speakerrate.com | Fecha: 03/05/2010 - IE9 traerá una pestaña 'red', al más puro estilo Firebug. ¡Ya era hora! :-)
Internet Explorer 9 está a la vuelta de la esquina, y su llegada defraudará a muchos por la escasa adopción de estándares y animará a otros con nuevas funcionalidades y herramientas que nos permitirán desarrollar para él con más comodidad.
Fuente: http://www.anieto2k.com/ | Fecha: 03/05/2010 - Un vistazo a los ActionResults en ASP.NET MVC 2.
In ASP.NET MVC, incoming browser requests gets mapped to a controller action method. The action method returns a type of ActionResult in response to the browser request. A basic example is shown below:
Fuente: weblogs.asp.net | Fecha: 03/05/2010
Publicado en: Variable not found