viernes, 8 de enero de 2010

ASP.NET Llamar JavaScript desde C#

Voy a explicarte un ejemplo con un par de posibilidades para llamar a un método JavaScript desde tu código de servidor C#. La clave está en el método "RegisterStartupScript" que nos permite registrar un código JavaScript desde el código de C# y que éste sea interpretado por el navegador. Te puedes descargar el código de ejemplo aquí.

La primera posibilidad es que quieras invocar un método JavaScript desde el Page_Load de tu página ASPX, para ello puedes hacer lo siguiente:


 

///<summary>

/// Evento de carga de la página

///</summary>

///
<param name="sender"></param>

///
<param name="e"></param>

protected
void Page_Load(object sender, EventArgs e)

{

//Se llama a un javascript cuando la página carga

string mensaje = "Este mensaje se genera desde c#";

ClientScript.RegisterStartupScript(this.GetType(), "myScript", "<script>javascript:mostrarMensaje('" + mensaje + "');</script>");

}


 

La segunda posibilidad es que quieras ejecutar un método JavaScript desde el evento de un control de tu página ASPX:


 

///<summary>

///El botón va a ejecutar un código javascript

///</summary>

///<param name="sender"></param>

///<param name="e"></param>

protected
void btnClick_Click(object sender, EventArgs e)

{

//Se genera el código javascript que se quiere ejecutar

System.Text.StringBuilder sb = new System.Text.StringBuilder();

sb.Append(@"<script language='javascript'>");

sb.Append(@"var lbl = document.getElementById('lblMensaje');");

sb.Append(@"lbl.style.color='red';");

sb.Append(@"alert(lbl.innerText);");

sb.Append(@"</script>");


 

if (!ClientScript.IsStartupScriptRegistered("JSScript"))

{

ClientScript.RegisterStartupScript(this.GetType(), "JSScript", sb.ToString());

}

}


 

Espero que te sea de utilidad y recuerda que puedes descarte el código aquí.

ASP.NET Depurar JavaScript

En este post te voy a explicar cómo depurar un Java Script.

Depurarlo no es complicado, basta simplemente con incluir una instrucción "debugger;" dentro de tu código de JavaScript, de esta forma, cuando este código pase a ejecutarse el depurador de Visual Studio se parará tal como lo hace en un break-point de tu código C#.


 

<script language="javascript" type="text/javascript">

function mostrarMensaje(mensaje)

{

debugger;

alert(mensaje);

}

</script>


 

Como puedes ver en la siguiente imagen Visual Studio te permite incluso de explorar los valores de tus variables dentro de tu JavaScript:



 

Espero que te sirva!

miércoles, 6 de enero de 2010

ASP.NET Ajax - Añadir triggers a un UpdatePanel dinámicamente

Este post te será útil en el caso de que estés interesado en añadir eventos como triggers de Update Panels programáticamente en tiempo de ejecución.

Cuando se añaden Triggers a un update panel en tiempo de diseño, el aspecto de nuestra página será el siguiente:


 

<asp:UpdatePanel
ID="UpdatePanel1"
runat="server"
ChildrenAsTriggers="False"
UpdateMode="Conditional">

<ContentTemplate>

<asp:Button
ID="BtnAcceptar"
runat="server"
Text="Aceptar"
OnClick="BtnAcceptar_Click"
/>

</ContentTemplate>

<Triggers>

<asp:AsyncPostBackTrigger
ControlID="BtnAcceptar"
EventName="Click"
/>

</Triggers>

</asp:UpdatePanel>


 

Si tus necesidades precisan que estos triggers sean añadidos en tiempo de ejecución utiliza el siguiente código:


 

AsyncPostBackTrigger Trigger = new
AsyncPostBackTrigger();

//ControlID = ID del control que provoca el evento.

Trigger.ControlID = ControlID;

//EventName = Nombre del evento, p.e: Click, SelectedIndexChange.

Trigger.EventName = EventName;

//Se añade el trigger al update panel

UpdatePanel1.Triggers.Add(Trigger);


 

Espero que te sea de utilidad!

.NET Log en el Visor de Sucesos (Event Viewer)

En este post quiero mostrarte como utilizar el visor de sucesos como para persistir los eventos de tu aplicación.

El soporte de Microsoft dice lo siguiente:

"Los registros de sucesos proporcionan un medio estándar y centralizado para que las aplicaciones graben sucesos (eventos) de software y hardware importantes. Windows suministra una interfaz de usuario estándar para ver los registros: el Visor de sucesos" (aquí)

No quiero contradecirlos pero, en mi opinión, no tendríamos que abusar del uso del registro de sucesos por las siguientes razones:

  1. El registro de sucesos se llena. A mí ya me ha ocurrido en una máquina XP, entiendo que en un servidor el tamaño será mucho más grande.
  2. La explotación de estadísticas. Es habitual querer obtener estadísticas de los eventos que provocan nuestras aplicaciones.
  3. Mantenimiento de aplicaciones. El Visor de Sucesos muestra los eventos escritos por todas las aplicaciones del sistema, por tanto es más difícil encontrar el evento que buscamos.

Mi recomendación sería usar una base de datos para persistir nuestros logs del tipo que sean (auditoría, errores, informativos…), para poder explotar estos datos. Aún así, los eventos informados en el registro de sucesos dan un aspecto más profesional a nuestras aplicaciones, pudiendo seleccionar ciertos eventos de nuestra aplicación que deberíamos persistir en el registro de eventos.

El uso es sencillo lo podéis ver aquí.

Sólo tienes que crear un nuevo proyecto usando la plantilla de "Aplicación del Consola" y tener el código siguiente en tu clase Main:


 

static
void Main(string[] args)

{

string sSource;

string sLog;

string sEvent;


 

sSource = "Nombre de mi aplicación";

sLog = "Application";

sEvent = "Mensaje de nuestro evento";

//Se añade nuestra aplicación como generadora de eventos si esta no existe

if (!EventLog.SourceExists(sSource))

{

EventLog.CreateEventSource(sSource, sLog);

}


 

//Se escribe una Advertencia/Warning

EventLog.WriteEntry(sSource, sEvent, EventLogEntryType.Warning, 230);

//Se escribe un error

EventLog.WriteEntry(sSource, sEvent, EventLogEntryType.Error, 231);

//Se escribe un error

EventLog.WriteEntry(sSource, sEvent, EventLogEntryType.FailureAudit, 232);

//Se escribe un error

EventLog.WriteEntry(sSource, sEvent, EventLogEntryType.Information, 233);

//Se escribe un er

EventLog.WriteEntry(sSource, sEvent, EventLogEntryType.SuccessAudit, 234);

}


 

Una vez ejecutes la aplicación consulta el visor de sucesos de tu máquina: Inicio > Ejecutar >eventvwr. Este tendrá el aspecto que puedes ver en la imagen siguiente:


 



 

Espero que te sea útil este post y si tienes alguna duda realiza un comentario.

sábado, 2 de enero de 2010

ASP.NET WebParts

Échale un ojo a este vídeo, explica el uso de los WebParts. Imaginas como se puede mejorar la administración de un sitio si permitimos a un usuario administrador cambiar los paneles de un sitio a otro, cambiar sus propiedades…En mi opnión aún no sabemos sacarle todo el jugo a los WebParts, pero nos convendría pensar en ellos como una posible propuesta a nuestros clientes. De hecho SharePoint aprovecha todas las funcionalidades de estos WebParts para la administración de sus sitios.

Aquí tienes el vídeo, espero que te de algunas ideas de cómo utilizar los WebParts en tus aplicaciones.