Page.IsPostBack

En ocasiones es muy útil conseguir que se ejecute algo sólo cuando se carga la página por primera vez, o todo lo contrario, que se ejecute sólo a partir de la primera carga. Esto se consigue con Page.IsPostBack

Poniendo el típico ejemplo simple, queremos que nos aparezca la fecha y hora de la primera vez en que se carga la página, y que ésta se mantenga aunque la página vaya y vuelva al servidor.

Y para dejarlo más claro, ¿cuándo la página va y vuelve al servidor? Pues por ejemplo, cuando presionamos sobre un DropDownList con el atributo AutoPostBack puesto a true o cuando presionamos sobre un Button.

Pongamos el siguiente ejemplo:

mipagina.aspx
<%@ Page Language="C#" CodeFile="mipagina.aspx.cs" Inherits="mipagina" %>
<html>
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
       <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
    </div>
    </form>
</body>
</html>


mipagina.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
         Label1.Text = DateTime.Now.ToString();
     }
}


Como se observa, cuando se cargue la página (Page_Load), si es falso que la página haya sido recargada (es decir, que es la primera vez que se carga), el texto de Label1 será la fecha y hora actual.
Comprobareis que si presionais sobre el button, la página va y vuelve al servidor, pero la fecha y hora sigue siendo la misma.

Para conseguir otro efecto distinto, cambiamos el Page_Load de mipagina.aspx.cs a lo siguiente:

    if (!Page.IsPostBack)
    {
         Label1.Text = "Primer acceso a la página";
     }
    else
    {
      
Label1.Text = DateTime.Now.ToString();
    }

Ahora, la primera vez que accedamos a la página se nos mostrará el texto "Primer acceso a la página" y cuando presionemos sobre el Button cambiará a la fecha y hora de ese momento.

Como conclusión, Page.IsPostBack no es más que un grano de arena en la enorme playa de herramientas que ofrece ASP.NET, pero es muy útil si se sabe usar... y claro está, el uso que se le dé depende ya de la imaginación de cada uno



#region y #endregion

Si usamos programas como los pertenecientes a la familia del Visual Studio (Visual Web Developer entre ellos) podremos hacer uso de #region y #endregion.

Estas clausulas nos permitirán organizar mucho mejor nuestro código, pues todo lo que vaya entre la cláusula de apertura #region y la de cierre #endregion lo podremos colapsar o expandir a nuestro libre albedrío.

El modo de uso es muy sencillo, tras la cláusula #region y separado por un espacio, daremos el nombre identificativo de esa región (el que queramos). En cuanto a #endregion, simplemente se pone al final de la región de código elegido.

A continuación os muestro un sencillo ejemplo de uso:

        #region Ejemplo de region
        private static StringCollection recogeTexto(out string texto)
        {
             // Función con 200 líneas
        }       

    private bool existeCaracter(string texto)
        {
             // Función con 100 líneas
        }
        #endregion


Se convertiría directamente en

    Ejemplo de region

Además, se pueden anidar tantas regiones como queramos, lo cual multiplica considerablemente su utilidad.



¿Y cómo empiezo yo a aprender C#?

Si ya sabes que asp.net es la mejor opción para la programación web, lo primero de todo es decidirse entre uno de los lenguajes que se pueden utilizar para trabajar con .NET. Te aconsejo que antes de leer este artículo le eches un vistazo a otro en que trato de "convencerte" de por qué C# para programar es lo mejor para programar con .NET.

if (estasConvencido)
{
    if (eresProgramadorDeC++)
    {
       // Estás de enhorabuena porque te será muy sencillo pasarte a C#
    }
    else if (eresProgramadorDeJava)
    {
       // No tanto como con C++, pero pasarte a C# no te será demasiado difícil
    }
    else if (siempreHasProgramadoConVB,PorEjemploConASP3.0)
    {
       // Tienes la opción de pasarte a VB.NET, pero personalmente te aconsejo C# :)
    }
    else if (erasPHPero)
    {
       // Ánimo y tírale cacho a C#
    }
    else
    {
       // Déjate de milongas con lenguajes "raros" y pásate a C# :PPPPPPPPPP
    } 
}

Bueno, fuera de bromas, a continuación te dejo un par de enlaces con unos tutoriales de C# con información más que suficiente para comenzar.

Cómo siempre, no vale sólo con leer, sino que también hay que experimentar, por lo que te aconsejo que antes sigas algunas de las directrices que aconsejo en el artículo ¿Cómo comienzo yo a aprender ASP.NET 2.0? y experimentes cosillas con el Visual Web Developer. De hecho, te aconsejaría que bailaras entre los tutoriales de ASP.NET 2.0 de los que hablo en el artículo ¿Cómo comienzo yo a aprender ASP.NET 2.0? y los que a continuación listo:

- Fantástico tutorial de programacion.com
- Libro online de Wikipedia



Algunas cositas del tipo string en C#

Una de las cosas que menos me ha gustado siempre cuando di mis primeros pasitos con C o con Java fue lo difícil o, mejor dicho, poco intuitivo que era trabajar con variables de tipo string.

C# incorpora una serie de herramientas muy útiles que nos hacen la vida más fácil, sobretodo en el mundo web, donde el trabajo con strings es el pan nuestro de cada día. A lo largo de este artículo comentaré algunas de esas herramientas, las más comunes, que no deben servir de otra cosa más que de introducción a todas ellas.

Para sentar bases, lo primero que hay que recalcar es que existe el tipo string tal cual, sólo tenemos que declarar la variable y trabajar con ella:

string mivariable = "Hola mundo cruel :)";

Sobre las variables de tipo string se puede trabajar forma muy sencilla. Por ejemplo, se puede aplicar el operador "==" para comparar dos strings, de modo que siguiendo el ejemplo

mivariable == "Hola mundo cruel :)";

daría true. Aplicar el operador "==" es lo mismo que hacer

mivariable.Equals("Hola mundo cruel :)");

o

string.Equals("mivariable", "Hola mundo cruel :)");

Estos dos últimos modos eran, a mi parecer, menos intuitivos que el primero.

Del mismo modo, es muy sencillo realizar operaciones de concatenación entre strings, pues no hay más que aplicar el operador "+". Por ejemplo, creamos tres variables string y a la tercera le hacemos la concatenación de la primera y la segunda.

string mivariable1 = string.Empty, mivariable2 = string.Empty, mivariable3 = string.Empty;
mivariable1 = "Blog de ASP.NET 2.0";
mivariable2 = "con C# en castellano";
mivariable3 = mivariable1 + mivariable2;


con lo que mivariable3 vale "Blog de ASP.NET 2.0 con C# en castellano. Como se observa, se han inicializado las tres variables string con una cadena vacía "string.Empty", algo que yo hago siempre por costumbre y que aconsejo a todos.
La aplicación del operador "+" para concatenar variables es lo mismo que hacer un

mivariable 3 = string.Concat(mivariable1, mivariable2)

Otra de las cosas útiles del tipo string, es que se puede acceder fácilmente a cada uno de los caracteres que lo forman, del mismo modo que se trata a un array. Por ejemplo, si se quiere averiguar cuantos caracteres 's' hay en la variable string, haríamos algo como:

int contador = 0;
for (int i = 0; i < mivariable3.Lenght; i++)
{
    if (mivariable3[i] == 's')
    {  
       contador++;
    }
}


Ojo, porque C# es siempre case sensitive, y no es lo mismo 's' que 'S'. Si queremos que encuentre ambos caracteres tenemos muchas opciones, pero una de las más sencillas podría ser aplicar el método ToLower() al string antes de comparar, que no hace otra cosa que poner en minúsculas todos los caracteres del string (ToUpper() los pone en mayúsculas), de modo que quedaría algo como

int contador = 0;
for (int i = 0; i < mivariable3.Lenght; i++)
{
    if (mivariable3.ToLower[i] == 's')
    {  
       contador++;
    }
}


En ocasiones puede preferirse recoger un vector de char con todos los componentes del string, con lo que no hay más que hacer

char[] vectorchar = mivariable3..ToCharArray();

aunque también es muy útil no pasarlo a un vector puro y duro, sino a convertirlo en un CharEnumerator, del que hablaré en un futuro.

CharEnumerator mischars = mivariable3.GetEnumerator();

Para finalizar con esta pequeña introducción al tratamiento de strings en C#, comentaré una de los métodos del tipo string más chulos, a la par que terriblemente sencillo. Se trata de

string.IsNullOrEmpty(mivariable3);

que nos hace más sencilla la típica sentencia en que nos aseguramos que un string está inicializado (no es null) o no está vacío.

Pues lo dicho, esto no ha sido una pequeña introducción a una enorme cantidad de herramientas que proporciona C# para con los strings. En artículos futuros comentaremos algunas de esas herramientas más avanzadas, así como el tipo StringBuilder, con el que mejoraremos muchísimo tanto la facilidad de trabajo como la eficiencia con el tratamiento y concatenación de muchos strings y/o strings muy largos.



¿Por qué C#?

Una de las (muchas) cosas buenas de .NET es que puedes usar hasta más de 40 lenguajes de programación diferentes, es la llamada integración de lenguajes

La idea es que a la hora de compilar, primero se traduce ese lenguaje a un lenguaje intermedio común a todos y que ya entiende .NET. Por tanto, vale con que exista un compilador especial para cada lenguaje para que éste pueda trabajar con el poder de .NET. Microsoft tiene creados compiladores para C++, J# y VB.NET, y obviamente C#, que es el lenguaje con el que se ha creado toda la plataforma .NET.

Organizado de este modo, podemos usar clases en C# que hereden de J# y ésta, a su vez de VB.NET.

Entonces, si se puede usar cualquier lenguaje... ¿Por qué utilizar C#? Muchas son las opiniones que pueden surgir al respecto.

C# es un lenguaje nuevo y a la vez maduro. Maduro porque, como ya he dicho, toda la plataforma .NET está hecha con C#. Fue creado por Scott Wiltamuth y Anders Hejlsberg, este último diseñador del TurboPascal y la herramienta RAD de Delphi.

Para crear C# se ha metido en una batidora a Visual Basic, C++ y Java, y se ha cogido lo mejor de cada uno y mejorado aquello en lo que éstas fallaban. Con esto está todo dicho, y vamos desde cosas tan triviales (y útiles) como una serie de herramientas completísimas para tratar strings, hasta una gestión de memoria más rápido, pasando por las famosas listas genéricas.

C# es más sencillo e intuitivo, más moderno, orientado a objetos (obviamente) y sobretodo muy eficiente. Podrían enumerarse decenas de mejoras en extensibilidad de tipos, de componentes, operadores, uso de instrucciones seguras, posibilidad de, explícitamente, hacer uso de código "no seguro", y un larguísimo etc.

Desde un punto de vista práctico, C# es el lenguaje de .NET con más y mejores ejemplos.

Además,  "cambiarse" a C# es fácil para todos los programadores de Java y C++, y no demasiado difícil para los VBneteros.

Unos VBneternos que suelen ser los más reacios a C# y suelen atacar directamente a VB.NET. Ponerse a ver cual es el mejor de ambos lenguajes (el 90% de las aplicaciones en .NET están en C# o VB.NET) es tontería, porque lo que uno verá como ventaja, otro lo verá como desventaja, a continuación os enlazo un artículo muy chulo en el que se hace una comparación entre C# y VB.NET.

A lo largo de varios artículos comentaré muchas cosas particulares que hacen de C# el lenguaje más apto para .NET.



¿Por qué ASP.NET?

Una vez nos hemos decidido por una aplicación Web, queda decidir qué tecnología vamos a utilizar de todas las existentes en el mercado. Opciones hay muchas y muy buenas siendo PHP, JSP, ASP y ASP.NET las más comunes. No se pretende enumerar todas y cada una de las características de todos estos lenguajes, simplemente vamos a ver una breve descripción de cada una de ellas y posteriormente trateremos de jutificar la elección de la última de ellas.

PHP
PHP es la tecnología Web más extendida en el momento. Nació para trabajar en Linux con servidor Apache, pero hoy en día puede alojarse en casi cualquier tipo de servidor. El código fuente está en abierto por lo que los bugs están muy controlados e inmediatamente solucionados, y además tiene una gran cantidad de módulos prefabricados que ya vienen instalados de fábrica en los servidores, y que no hay más que aprender a utilizar.

Su sintaxis es muy similar a C, quizás algo más simple, y destaca que fue creada para programar páginas Web, aunque también se puede programar en local. Se comunica con bases de datos sin necesidad de usar ODBC. Las últimas versiones ya trabajan con orientación a objetivos. Hasta ahora es un lenguaje de script, no compilado.

JSP
Los Servlets de Java son muy comunes en aplicaciones Web potentes, como bancos o grandes empresas. Comparte muchas de las ventajas de ASP.NET, sobretodo en cuanto a la programación modular y orientada a objetos, pero sus carencias son también muy destacadas. Sobretodo su bajo enfoque de cara al usuario da mucho trabajo para presentar páginas Web al navegador.

Para muy grandes aplicaciones suele elegirse JSP en lugar de PHP, dado que PHP es un lenguaje de más bajo nivel que JSP y dificulta la modularización y organización por capas de la aplicación.

ASP
ASP es la tecnología pionera en las aplicaciones Web que se ejecutan en el servidor. Desarrollada por Microsoft y optimizada para su ejecución en servidores Windows con tecnología NT bajo IIS, aunque también hay opciones para Windows 98 con el Personal Web Server y para Linux con Chilisoft.

Al ser una tecnología propietaria, no tiene la enorme cantidad de módulos extra que sí tiene PHP, aunque abriendo objetos COM trabaja fácilmente con archivos dll.

El hecho de que habitualmente los servidores de hospedaje de Internet sean más caros, han hecho que ASP deje de ser la tecnología para página Web dinámicas orientadas a servidor más utilizada, tal y como lo llegó a ser en sus inicios.

Usa Visual Basic Script, lo que para los desarrolladores Visual Basic era una ventaja pues no tenían que aprender otro lenguaje, para otros es una desventaja, pues consideran que no es más que un parche Web de un lenguaje ya existente, y que no fue creado expresamente para los servidores Web, como sí pasa con PHP. También soporta el lenguaje JScript (Javascript de Microsoft). Se comunica con las bases de datos vía ODBC, y la comunicación con SQL Server es óptima.

ASP.NET
ASP.NET rompe totalmente con el pensamiento de script que se tenía hasta el momento. El cambio en la arquitectura es radical. De hecho, lo único que mantiene de ASP es el nombre, el propietario y la evolución de Visual Basic a Visual Basic .NET (VB.NET)… el resto es todo nuevo.

Dado que la Web no se lee secuencialmente sino que se compila, lo primero que llama la atención es el enorme incremento de velocidad de respuesta del servidor. Además, al compilarse, el incremento en seguridad y fortaleza es muy grande.

ASP.NET introduce el concepto del code-behind, por el que una misma página se compone de dos ficheros: el de la interfaz de usuario y el de código. Con ello se facilita la programación de aplicaciones en múltiples capas, lo que en definitiva se traduce en la total separación entre lo que el usuario ve y lo que la base de datos tiene almacenado. Por tanto, cualquier cambio drástico de especificaciones minimiza los cambios en la aplicación y maximiza la facilidad de mantenimiento.

Asimismo, ASP.NET nos sirve tanto para Webs sencillas como para grandes aplicaciones. No debemos olvidar que la orientación a objetos y la naturaleza compilada permiten que hagamos uso de herramientas de creación de Webs, las más importantes de la familia del Visual Studio, que nos facilitan mucho la tarea de programación. Estas herramientas permiten hacer Webs sencillas y de bajas prestaciones en un tiempo record, así como llevar el mantenimiento de grandes aplicaciones de forma más sencilla.

Resumiendo, tenemos mayor velocidad, mayor potencia, mayor seguridad, mayor facilidad de mantenimiento y herramientas de trabajo, pero las ventajas no paran aquí. A continuación enumeramos algunas otras que no tienen ASP, PHP o JSP:

-    Caché: se puede almacenar en la caché del servidor tanto páginas enteras, como controles personalizados o simples variables. En páginas críticas con mucha carga de base de datos nos es muy útil almacenar datos de la base de datos en la caché, reduciendo enormemente el consumo de recursos.
-    Carpetas especializadas, como por ejemplo app_code que compila automáticamente las clases que se alojan en él, o la carpeta app_theme que alojan ficheros que marcan los temas de estilos de la Web.
-    Los archivos de configuración Web.config y Machine.config permiten realizar operación de configuración en ficheros que hasta ahora había que realizar en el servidor.
-    La adaptación automática del código devuelto a los dispositivos que le acceden. Una misma página puede servirnos para el Internet Explorer, para el Pocket Internet Explorer desde una PDA o para un navegador de un móvil cualquiera.
-    La eliminación total de la necesidad de frames con la introducción de las masterpages.
-    La extraordinaria compatibilidad con XML y los servicios Web.
-    La multitud de controles Web que permiten mucha funcionalidad con poco código. Desde enlace con las bases de datos o enseñar fácilmente todos los datos, hasta simples etiquetas, hiperenlaces o generadores de imágenes.
-    Se puede utilizar hasta cuarenta lenguajes distintos para el desarrollo en ASP.NET, aunque en el 95% de las aplicaciones se usa C#, VB.NET o J#.

¿Por qué la versión 2.0?
Las razones de elegir la versión 2.0 en lugar de la ya madura versión 1.1 es una gran mejora en todos los aspectos en general, pero destacamos la comunicación con base de datos, ADO.NET 2.0, C# 2.0 y el incremento de los controles Web.

No en vano la relación de líneas de código entre ASP.NET 1.1 y ASP.NET 2.0 es de diez a uno, ya que muchos de esos controles realizan de forma óptima multitud de tareas que se repiten en todas las aplicaciones. Por ejemplo, enlazar con la base de datos, asignar una clase para programación multicapa de selección, inserción, borrado y modificación, enseñar esos datos en pantalla, paginarlos y permitir la modificación o borrado de registros lo podemos realizar en tres líneas:

1: <asp: ObjectDataSource ID="ODS1" runat="server" DeleteMethod="BorrarUsuario" InsertMethod="BorrarUsuario" SelectMethod="BorrarUsuario" TypeName="PFC.Admin.Usuarios" UpdateMethod="BorrarUsuario" />
2: <asp: GridView ID="GV1" runat="server" DataSourceID=" ODS1" AutogenerateColumns = “True” AllowPaging="True" />
3: <Columns><asp: CommandField ShowDeleteButton = "True" ShowEditButton = "True" ShowSelectButton = "True" /> </Columns>

     Personalizar las columnas, asignar parámetros a procedimientos almacenados, y demás quehaceres procuran unas pocas líneas de código adicionales. No es nuestra preocupación el hacerlo todo con el menor número de líneas de código posible, sino en centrarnos en el código más útil y no en el que se repite aplicación tras aplicación.



¿Cómo comienzo yo a aprender ASP.NET 2.0?

A ver, ya estás convencido, ASP.NET 2.0 es la mejor opción, pero, ¿cómo comienzo?

Para empezar, debes saber que la biblia de ASP.NET es su propia página oficial www.asp.net. Aquí empieza tu viaje de aprendizaje.

Lo primero será comenzar por el tutorial, es muy bueno y perfecto para empezar, con un montón de ejemplos diferentes. Cuando lo has terminado te da la sensación de que has aprendido mucho, de que sabes por donde van los tiros... pero que te queda un mundo por delante!!

Aún así, sólo sabiendo lo que dice en ese tutorial, serás capaz de realizar webs de muy alta calidad.

Como verás, a lo largo del tutorial se te explica todo desde el principio y como ya he comentado, se ponen muchísimos ejemplos. Pues bien, ¿qué mejor que experimentar con esos ejemplos?

El mejor programa gratuito para no sólo experimentar sino trabajar es el Visual Web Developer Express. Se trata de una versión "capada" de Visual Studio 2005, con muchas funcionalidades de sobra para hacer buenos proyectos, pero sin algunos de los usos más comunes para el trabajo estrictemente profesional. Pero bueno, como digo vale para empezar de sobra.

Puedes conocer más sobre el Visual Web Developer aquí, y si quieres bajártelo directamente, lo puede hacer desde aquí. OJO, si has tenido alguna versión beta del Visual Web Developer en tu ordenador, no te lo bajes directamente, y sigue las instrucciones pertienentes para desinstalar las versiones Beta.

Para abrir boca, y mientras se descarga el programa, te aconsejo que te leas el pequeño Tour que tienen preparado, donde te explican algunas de las funcionalidades típicas del VWD.

Bien, ya llevas un buen trabajo hecho, te has leído el tutorial, has hecho un pequeño Tour y has experimentado en el VWD con varios ejemplos, así que ahora te toca a ti, y a tu imaginación, darle caña a ASP.NET 2.0...

Eso sí, espero que te surjan dudas, porque sino mala señal sería . Y no una duda ni dos, sino un carro lleno... ¿y dónde las vas a preguntar?
No hay problema www.asp.net te vuelve a solucionar el problema, en los foros de asp.net se preguntan y responden diariamente cientos de dudas, y además por gente muy cualificada, desde profesores de universidad hasta MVP de Microsoft, ¡¡Incluso por el propio equipo creador de ASP.NET!!!


El único "problema" de todo esto es que está total y absolutamente en inglés... pero tiempo al tiempo, poco a poco crearemos una estructura de aprendizaje en castellano!!!