Parámetros dinámicos en Silverlight 3 con <object>
Como sabrán una de las cosas que la versión final de Silverlight 3 no tiene es el control de ASP.NET AJAX para Silverlight (control <asp:Silverlight>). Esto es un cambio de paradigma, para todos aquellos que estábamos acostumbrados a utilizarlo en nuestras páginas .aspx, ya que no tenemos una manera intuitiva de establecer las propiedades para el plugin de Silverlight 3. El camino a seguir ahora es utilizar la etiqueta <object> de HTML. Pueden encontrar una lista de los parámetros que podemos establecer para nuestras aplicaciones Silverlight en esta página del MSDN.
Ahora bien, la pregunta es: ¿cómo podemos establecer parámetros iniciales dinámicos del lado del servidor para el plugin de Silverlight? Esto como recordarán estaba en la propiedad InitParameters del control <asp:Silverlight>, y al ser un control de servidor podíamos utilizarlo en el evento Page_Load de la página. Con <object> este ya no es el caso pero de todas formas sí podemos establecer parámetros iniciales de manera dinámica del lado del servidor si utilizamos el control <asp:Literal> al agregar el parámetro initParams de la siguiente manera:
<param name="initParams" value=’<asp:Literal runat="server" ID="parametros" />’ />
Esto nos permitire tener acceso programático del lado del servidor al control llamado ‘parametros’ y establecer en él cualquier valor que necesitemos. El siguiente fragmento de código muestra el manejador del evento Load de la página aspx:
protected void Page_Load(object sender, EventArgs e)
{
parametros.Text = string.Format("nombre={0},fecha={1}", "Rodrigo", DateTime.Now.ToString());
}
Como podemos apreciar, se están estableciendo dos parámetros iniciales: usuario y fecha. Para leerlos lo hacemos de la manera tradicional, por medio de los argumentos del evento Application.Startup de nuestra aplicación Silverlight:
private void Application_Startup(object sender, StartupEventArgs e)
{
string nombre = string.Empty;
string fecha = string.Empty;
if (e.InitParams.Count > 0)
{
if (e.InitParams["nombre"] != null)
nombre = e.InitParams["nombre"];
if (e.InitParams["fecha"] != null)
fecha = e.InitParams["fecha"];
}
this.RootVisual = new MainPage(nombre, fecha);
}
De esta manera, podemos sortear la falta del control asp:Silverlight en nuestros aplicativos de Silverlight 3.
Salu2!