viernes, 18 de septiembre de 2009

Validar Estructura HTML

Amigos una forma sencilla de validar la estructura HTML en nuestra aplicación es tratarlo como Xml
con este metodo podemos lograrlo

private void ValiateHTML(string html)
{
ASCIIEncoding myEncoder= new ASCIIEncoding();
Byte[] bytes = myEncoder.GetBytes(html);
MemoryStream ms = new MemoryStream(bytes);

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(ms);
}


en la siguiente imagen, con el texto html que contiene un error, al pasarlo por el metodo este nos mostrara un error que podemos capturarlo y poder hacer las validaciones

el error:

Espero les sea de ayuda

Eloy.


sábado, 12 de septiembre de 2009

Hacer que funcione le menu de Asp.net con Google Chrome

Para aquellos que se encontraron con problemas al crear un menu clásico de asp.net y corrieron bajo google chorme, se encontrarán que el comportamniento es muy diferente y no funciona adecuadamente, pues esto se soluciona de la siguiente manera

1. en su aplicacion web agreguen una carpeta de asp .net del tipo App_Browsers y agreguen un archivo de extencion *.browser


2. luego peguen el siguiente codigo

pues ahora ya pueden ver su menu clasico de asp.net corriendo en google chrome


jueves, 3 de septiembre de 2009

Como evitar el doble Postback

Cuanta veces nos ha ocurrido que en una pagina aspx, sencilla de un matenimiento simple con un boton guardar, cuando pulsamos sobre el se ejecuta el evento y el postback pero, que pasa si


despues de ello al usuario se le ocurre refrescar la pagina desde el navegador o hacer F5, ocurre



algo inesperado pues al hacer nuevamente el postback el evento del boton se vuelve a ejecutar y es como que si ubiesemos hecho click nuevamente. esto causaria molestias al usuario pues no deberia suceder.



asi que voy a postear una forma practica de como solucionarlo




primero tienen que crear una clase donde implementemos el IHttpModule y controlarlo mediante una sesion


using System;
using System.Collections.Generic;
using System.Web;
using System.Web.SessionState;

public class HttpModuleCutom: IHttpModule, IRequiresSessionState
{
public HttpModuleCutom()
{
//
// TODO: Add constructor logic here
//
}

#region IHttpModule Members

public void Dispose()
{
//throw new NotImplementedException();
}

public void Init(HttpApplication context)
{
context.PostRequestHandlerExecute += new EventHandler(context_PostRequestHandlerExecute);

}
void context_PostRequestHandlerExecute(object sender, EventArgs e)
{
if ((sender as HttpApplication).Context.Session != null)
{
if ((sender as HttpApplication).Context.Session["Key"] == null)
{
string s = System.Guid.NewGuid().ToString();
(sender as HttpApplication).Context.Session["Key"] = s;
}
else { (sender as HttpApplication).Context.Session["Key"] = null; }
}
}



y luego hay que registrarla en el web.config

<httpModules>
<add name="HttpModuleCutom" type="HttpModuleCutom"/>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>


Ahora creen una pagina sencilla como la de la imagen




Cuando compilen y cargen la pagina esta automaticemente se va al evento PostRequestHandlerExecute donde vamos hacer el trabajo de validadcion y verifica que la session exista y si no existe la va a crear por primera vez

ahora al pulsar el boton se va activar el evento y es alli donde entra a tallar la clase creada pues veremos que el Session["Key"] tiene asignado un valor



Y cuando termina de ejecutarse pasa al evento PostRequestHandlerExecute y como detecta que es un segundo postback le asigana null a la session


y al pasar nuevamente por el evento click del boton no ejecuta la accion por la Session["Key"]= null