Nella versione 3.0 di Silverlight, utilizzando quindi i relativi tools per Visual Studio 2008, vi sarete sicuramente accorti che non è più presente il controllo asp:Silverlight all'interno dell'assembly System.Web.Silverlight; la cosa è evidente soprattutto all'interno del template di sito web che viene creato per effettuare il test della propria applicazione Silverlight, in quanto entrambe all'interno delle pagine (.html e .aspx) di test, viene utilizzato sempre il tag "object" e un pò di codice javascript per la gestione degli errori.
Microsoft garantisce la compatibilità con le versione precedenti, infatti a fronte di applicazioni Silverlight 2.0 è ancora possibile continuare ad utilizzare il controllo senza problemi. Con qualche sforzo, è possibile utilizzare tale controllo anche in un'applicazione Silverlight 3.0, mantenedo però il numero minimo di versione richiesto alla versione 2 e perdendo tutte le novità della tecnologia riguardanti l'accallerazione hardware.
Il controllo in questione non è più parte della distribuzione ufficiale in quanto ritenuto meno flessibile rispetto all'utilizzo della tecnica del tag object o di quella che vede la scrittura di codice javascript, per l'inizializzazione del controllo Silverlight. Questo secondo approccio, sicuramente, offre un livello di complessità maggiore ma con risultati notevoli, soprattutto per quanto riguarda l'installazione del plug-in.

Personalmente, su tutti i miei progetti Silverlight che man mano migro alla versione 3.0, il punto in cui mi manca maggiormente il controllo asp:Silverlight riguarda i parametri di inizializzazione. Non che questi non possano più essere utilizzati, sia chiaro. Ma perchè ora, attraverso l'utilizzo del tag object, che vede la presenza di parametri di input all'interno di un tag "param":

<param name="initParams" value="color=Blue" />

volendo effettuare prima delle computazioni lato server, è necessario utilizzare tecniche differenti per il rendering dei valori all'interno di quel tag param.
Per esempio, possiamo valorizzare una proprietà o un campo lato server e renderizzarlo in questo modo:

<param name="InitParams" value="<%=InitParams %>" />

protected string InitParams { get; set; }


public void Page_Load(object sender, EventArgs e)
{
InitParams = String.Format("color={0}", Request.QueryString["color"]);
}


oppure possiamo renderizzare direttamente l'intero tag param, lato server, utilizzando un controllo di tipo Literal:

<div id="silverlightControlHost">

<object data="data:application/x-silverlight-2," type="application/x-silverlight-2">
<paramname="source"value="ClientBin/PeppeDotNet.Silverlight.xap"/>
<paramname="onError"value="onSilverlightError"/>
<paramname="background"value="white"/>
<paramname="minRuntimeVersion"value="3.0.40624.0"/>
<asp:Literal ID="ParamInitParams" runat="server" />
<!-- ... -->
</object>
</div>

ParamInitParams.Text = "<param name=\"InitParams\" value=\"color=Red\" />";


oppure, possiamo aggiungere l'attributo id e l'attributo runat="server" all'elemento di tipo param, e gestire il valore dell'attributo "value" lato server, in questo modo:

<param runat="server" name="initParams" id="prmInitParams" />

prmInitParams.Attributes["value"] = "color=Yellow";


In fin dei conti, l'utilizzo di una metodologia al posto delle altre è una scelta abbastanza personale. L'unica cosa cui dovete tener conto è che gli effettivi parametri che vengono renderizzati all'interno dell'attributo value di un tag param, siccome vanno poi a far parte del codice della pagina, vanno trattati preventivamente attraverso l'utilizzo del metodo HtmlEncode(). Inoltre, va trattato diversamente anche l'utilizzo delle virgole, in quanto queste vengono utilizzate per separare un parametro dall'altro, quindi devono essere sostituite all'interno dei valori dei vari parametri per non causare un malfunzionamento dell'applicazione.