miércoles, 30 de diciembre de 2009
Novedades Asp.Net 4.0
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); ListCreo 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.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); } } //
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.
jueves, 23 de julio de 2009
Deshabilitar la cache de una pagina asp.net en Firefox
lunes, 20 de julio de 2009
Ordenar un Dropdownlist con Linq
jueves, 25 de junio de 2009
Comprobar si una página es válida desde javascript
jueves, 28 de mayo de 2009
Recorrer los nodos de un TreeView control desde javascript
miércoles, 20 de mayo de 2009
Cachear imagenes creadas en un HttpHandler
//creacion de un objeto TimeSpan que va a indicar la duración de la cache
TimeSpan freshness = new TimeSpan(0, 0, 10, 0);
//se configura el tiempo de expiración de la cache
context.Response.Cache.SetExpires(DateTime.Now.Add(freshness));
//configuracion del ámbito de la cache
context.Response.Cache.SetCacheability(HttpCacheability.Public);
context.Response.Cache.SetValidUntilExpires(false);
Posteriormente se se envia la salida de la imagen
context.Response.ContentType = "image/gif";
context.Response.OutputStream.Write(buffer, 0, buffer.Length);
martes, 19 de mayo de 2009
Como saber si si ha ocurrido un Postback Asíncrono Parcial
{
if (Page.IsPostBack)
{
//Se obtiene comprueba la propiedad IsInAsyncPostBack
if (ScriptManager.GetCurrent(this.Page).IsInAsyncPostBack)
{
// TODO logica para una recarga parcial
}
else
{
//logica para un postback total
}
}
}
jueves, 14 de mayo de 2009
Enlazar un enumerado a un Dropdownlist c#
martes, 12 de mayo de 2009
Ciclo de vida de una pagina Asp.Net
Saber que control ha provocado el Postback
Determining the Control that Caused a PostBack
lunes, 11 de mayo de 2009
TreeView SelectedNodeStyle no funciona sin Postback
Acceder a un control dentro de un ContentPlaceHolder desde JavaScript
ctl00_ContentPlaceCuerpoPagina_txtNombre La solución fácil seria acceder usando el nombre completo document.getElementById("ctl00_ContentPlaceCuerpoPagina_txtNombre").value Esto seria poco elegante y ademas peligroso, ya que si en algun momento se cambia el nombre del ContentPlaceHolder,esa sentencia ya no seria valida. Una forma efectiva de acceder al control seria. document.getElementById('<%=txtNombre.ClientID %>').value