martes, 16 de octubre de 2012
Asp.net Mvc Validación campo decimal en-ES Cultura
martes, 23 de noviembre de 2010
Programadores Web vs Diseñadores Web
Web Designers vs Web Developers is brought to you by Wix.com
Use creative design to make a Free Website
You are most welcome to share this infographic with your audience.
viernes, 19 de noviembre de 2010
Eliminar los espacios en blaco extra en una cadena
System.Text.RegularExpressions.Regex.Replace(input, @"\s+", " ");
lunes, 15 de noviembre de 2010
Crear Web Site desde la Administración Central en Windows 7
viernes, 5 de noviembre de 2010
Manual de Instalación de Biztalk 2010
Aunque la instalacion de Biztalk ha ido mejorando con las diferentes versiones, todavia es un proceso largo y tedioso debido a los diversos pre-requisitos necesarios.
Para hacer este proceso un poco mas sencillo aqui os dejo un enlace en el que muestran paso a paso como instalar y configurar Biztalk 2010 y todos los requisitos necesarios.
martes, 28 de septiembre de 2010
Función de búsqueda en Biztalk 2010 Mapper
martes, 4 de mayo de 2010
Análisis de código en Visual Studio 2010
En esta pestaña podemos habilitar o deshabilitar dicho análisis simplemente seleccionando un checkbox. Microsoft ofrece varios conjuntos de reglas preestablecidas de los que podemos hacer uso, pudiendo seleccionar solo las reglas que nos convengan en cada momento. A continuación os muestro un listado de los conjuntos de politacas que viene con VS2010:viernes, 9 de abril de 2010
Novedades Entity Framework 4
- http://blogs.msdn.com/adonet/archive/2009/05/21/poco-in-the-entity-framework-part-1-the-experience.aspx
- http://mshelp.be/entity-framework-4-0-part4-how-to-use-your-own-pocos-333.htm
ListPatrones y Tesetabilidad EF4 incluye una interface adicional que facilita la escritura de código orientado a pruebas usando el framework. Además para facilitar las pruebas ahora es posible el uso de patrones como el Repository y el UnitOfWork. Más información en Entity Framework 4.0 Testeability Improvements.customers = context.Customers.ToList(); context.ContextOptions.DeferredLoadingEnabled = true; foreach (Customer cust in context.Customers) Console.WriteLine("Customer {0}, Account {1}", cust.Person.LastName.Trim() + ", " + cust.Person.FirstName, cust.AccountNumber);
jueves, 25 de marzo de 2010
Guia de arquitectura
En definitiva se trata de un buen documento que deberia ser leido por cualquiera que este interesado en desarrollar software de calidad con una arquitectura bien definida y que aproveche todos los elementos que el nuevo framework 4.0 nos ofrece.
martes, 16 de marzo de 2010
Enumerados con valores de tipo cadena C#
///Ahora es necesario crear un Método de extension para poder obtener el string asociado al valor del enumerado./// Se crea una clase que hereada de Attribute /// esta clase almacenara el string con el valor /// del enumerado /// public class StringValueAttribute : Attribute { #region Properties ////// Holds the stringvalue for a value in an enum. /// public string StringValue { get; protected set; } #endregion #region Constructor ////// Constructor used to init a StringValue Attribute /// /// public StringValueAttribute(string value) { this.StringValue = value; } #endregion }
///Ahora vemos como crear un enumerado/// Se obtiene la cadena asociada /// a un valor concreto del enumerado,esto solo funciona /// si se ha asignado previamente un valor al atributo StringValue /// /// ///public static string GetStringValue(this Enum value) { // Get the type Type type = value.GetType(); // Get fieldinfo for this type FieldInfo fieldInfo = type.GetField(value.ToString()); // Get the stringvalue attributes StringValueAttribute[] attribs = fieldInfo.GetCustomAttributes( typeof(StringValueAttribute), false) as StringValueAttribute[]; // Return the first if there was a match. return attribs.Length > 0 ? attribs[0].StringValue : null; }
public enum MyEnum: int {
[StringValue("Lun")]
Lunes= 1,
[StringValue("Mar")]
Martes = 2
}
Como parte final vemos como usar nuestro enumerado.
MyEnum myE = MyEnum.Lunes; string val = myE.GetStringValue();
lunes, 22 de febrero de 2010
Mantener la posicion de un Div después de un postback asíncrono
Lo que hacemos es añadir dos manejadores BeginRequestHandler y EndRequestHandler, el primero se ejecuta justo antes de realizar el postback, en él obtenemos la posición del scroll y la almacenamos, en el segundo restauramos esa posición.
sábado, 30 de enero de 2010
Novedades Asp.Net 4.0 parte II
Output cache
Con la aparición de la primera versión de asp.net se introdujo el concepto de output cache, esto permite a los desarrolladores almacenar páginas, controles y las respuestas Http en la memoria de forma que las siguientes peticiones Web, asp.net puede servirlas de forma mucho más rápida y eficiente ya que solo tiene que acudir a la memoria y coger el código genera anteriormente para la página, editándose así una nueva generación del código de salida de la página.
Asp.Net 4 añade un punto más a esta funcionalidad permitiendo al desarrollador añadir uno o varios proveedores personalizados de output-cache. Estos proveedores (providers) permiten usar cualquier mecanismo de almacenamiento para persistir el código HTML. Esta nueva funcionalidad permite al desarrollador crear diversos providers en función del tipo de almacenamiento que precise en cada situación (discos remotos o locales, almacenamiento en la nube, motores de cache distribuida), combinandolos a su gusto.
Para crear un Cache provider personalizado debemos crear una clase y heredar de System.Web.Caching.OutputCacheProvider. Una vez creado el nuevo proveedor de cache tendremos que dar un paso mas para poder utilizarlo, este paso ya os lo podréis imaginar... si, tenemos que configurarlo en el Web.config, para ello, dentro de la sección de providers se ha creado una nueva subsección llamada outputcache. El siguiente fragmento de código nos muestra la sección de un web.config en el que se configura la cache para que se almacene en memoria. Este es el tipo de almacenamiento que se usa por defecto Asp.net 4.
Ademas de esto, podemos añadir un mayor nivel de detalle especificando a nivel de control o de petición. La manera mas sencilla de configurar un nuevo proveedor para un Control se usuario es utlizando la sintaxis declaratia. Para ello se ha creado un nuevo atributo llamado providerName, a continuación vemos como como utilizarlo
<%@ OutputCache Duration="60" VaryByParam="None" providerName="DiskCache" %>
Si por el contrario lo que queremos es configurar un proveedor difirente dependiendo de la página que se vaya a solicitar tendremos un poco más de trabajo. Es necesario sobreescribir el método GetOuputCacheProviderName en el Global.asax para especificar manualmente que proveedor corresponde con cada petición de página.
public override string GetOutputCacheProviderName(HttpContext context)
{
if (context.Request.Path.EndsWith("Advanced.aspx"))
return "DiskCache";
else
return base.GetOutputCacheProviderName(context);
}
Después de ver de forma muy resumida esta nueva caracteristica que nos ofrece asp.net a cada desarrollador se le pueden ocurrir algunas situaciones en las que podremos sacar provecho de esto, por ejemplo podemos combinar los distintos tipos de proveedores para conseguir accesos mas rápidos almacenando las páginas mas visitadas en memoria y aquellas que lo son menos en disco.
lunes, 11 de enero de 2010
Visual Studio 2010, Retrasado.
miércoles, 30 de diciembre de 2009
Novedades Asp.Net 4.0
Esto es posible gracias a que la mayoría de los elementos de conflagración han sido movidos al fichero machine.congif de forma que ahora las aplicaciones heredan del mismo. Esta novedad no aporta funcionalidad alguna pero si permite mayor legibilidad del código que teniendo en cuenta la cantidad de información que tenemos que manejar no es poco.
Feliz año nuevo a todos, menos framework y mas Champagne!!
jueves, 3 de diciembre de 2009
Cache de Objectos .Net: Applications Block
using Microsoft.Practices.EnterpriseLibrary.Caching; using Microsoft.Practices.EnterpriseLibrary.Caching.Expirations;
CacheManager cacheManager;
cacheManager = CacheFactory.GetCacheManager("MyCacheManager");
//Cache Manager es el nombre que le hemos dado al CacheManger en la herramienta de configuración
Usuario user = new Usuario("jorge", "españa", "28");
cacheManager.Add(user.nombre, user, CacheItemPriority.Normal, null, new SlidingTime(TimeSapn.FromMinutes(5)));
Con este ejemplo no se intuye la verdadera necesidad de utilizar este Block, pero si imaginamos situaciones en las que necesitemos realizar la cache en la capa de acceso a datos se vuelve un instrumento de gran importancia.sábado, 7 de noviembre de 2009
Descubriendo HtmlAgilityPack
static void Main(string[] args)
{
var client = new System.Net.WebClient();
client.Encoding = System.Text.Encoding.UTF8;
var document = new HtmlAgilityPack.HtmlDocument();
document.LoadHtml(client.DownloadString("http://irokhes.blogspot.com/"));
//Obtenemos el titulo de cada uno de los post
foreach (HtmlAgilityPack.HtmlNode node in
document.DocumentNode.SelectNodes("//h3[@class='post-title entry-title']"))
Console.WriteLine(node.InnerText.Trim());
}
En el siguiente ejemplo podemos ver como modificar el código de una página, en este caso se trata de como podriamos reparar los enlaces de una página.
HtmlDocument doc = new HtmlDocument();
doc.Load("file.htm");
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
{
HtmlAttribute att = link["href"];
att.Value = FixLink(att);
}
doc.Save("file.htm");
Por último vamos a ver como Usar sentencias de Linq sobre una página web. En este ejemplo vamos a obtener la url de todas las imagenes que aparecen en el blog.
static void Main(string[] args)
{
string url = "http://irokhes.blogspot.com/";
WebClient client = new WebClient();
string html = client.DownloadString(url);
// Load the Html into the agility pack
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
List imageNodes = null;
imageNodes = (from HtmlNode node in doc.DocumentNode.SelectNodes("//img")
where node.Name == "img"
select node).ToList();
foreach (HtmlNode node in imageNodes)
{
//Se escribe el atributo src de cada una de las imagenes
Console.WriteLine(node.Attributes["src"].Value);
}
}
//
Creo que con estos ejemplos se puede ver la sencillo que es usar la libreria, basta con conocer alguans sentencias de Xpath para poder acceder a cualquier elemento de una págino. Si a usamos esta libreria en conjunto con alguna herramienta como Internet explorer developer toolbar o Firebug podremos examinar la información de cualquier web aunque esta no disponga de una Api especifica para ello.
miércoles, 30 de septiembre de 2009
Usar jQuery con MasterPage
<script src="<%= Page.ResolveUrl("~/Js/ui.core.js") %>"
language="javascript" type="text/javascript"></script>
miércoles, 9 de septiembre de 2009
Posicionar ModalPopupExtender desde Javascript
function pageLoad() {
$find('<%= ModalPopupPermisosSinGrid.ClientID %>').add_showing(onshowing);
}
Una vez hemos capturado el evento Show, definimos la posición de la ventana modal. En este caso la posición depende del tamaño de la pantalla.
function onshowing() {
var alto = screen.height;
var posicion_Y = alto / 20;
//seria el mismo funcionamiento para la cordenado X
$find('<%= ModalPopupPermisosSinGrid.ClientID %>').set_Y(posicion_Y);
}
martes, 1 de septiembre de 2009
Ordenar ListItemCollection
private void OrdenarListBox(ListBox listBoxControl)
{
//se convierte la coleccion de items a un array
ListItem[] myListItemArray = new ListItem[listBoxControl.Items.Count];
lbxRecursosAsignados.Items.CopyTo(myListItemArray, 0);
//mediante linq se ordena el array por el campo Texto del item
IEnumerable<ListItem> query = from r in myListItemArray orderby r.Text ascending select r;
//se enlaza el array al control
lbxRecursosAsignados.DataSource = query;
lbxRecursosAsignados.DataBind();
}
jueves, 27 de agosto de 2009
Compatibilidad de los navegadores con CSS
<!--[if gte IE6]>Otra forma de aplicar distintos estilos a una web en función del navegador es haciedo esta diferenciación dentro de la hoja de estilo, en este caso podemos ver varios ejemplos de como hacerlo.
<link rel="stylesheet" type="text/css" href="styles/ie.css" />
<! [endif] -->
#something { color: red; } /* Se aplica a IE6 y superior. */
*+html #something { color: green; } /* Se aplica a IE7. */
* html #something { color: blue; } /* Se aplica a IE6. */
margin-left: 5px; /* Margen izquierdo para todos los navegadores */ .margin-left: 7px; /* Margen izquierdo de 7px para IE6 y IE7, los demas navegadores todavia seguiran manteniendo el margen de 5px inicial */ _margin-left: 6px; /* Sólo IE6 leerá y entendera este estilo y aplicará el valor */Por último podemos recurrir a otro pequeño truco, si en nuestra hoja de estilos añadimos una propiedad y le anteponemos '//' internet explorer si que interpretara esta propiedad pero el resto de navegadores no.
#nonie{//display: none;}
#iebased{
display: none;
//display: visible;
}
En esta caso si tuvieramos dos Div´s como los siguientes :
<div id="nonie"> Tu <i>no estas</i> utilizando Internet Explorer. </div> <div id="iebased"> Tu <b>estas</b> utilizando Internet Explorer. </div>En este caso solo veriamos la capa correspondiente en función del tipo de navegador que usemos. Este ultimo truco no es demasiado elegante pero si muy funcional.