Lo que está viendo es código basado en el control del servidor web asp:Silverlight
, pero ese control se suspendió de Silverlight 3 en adelante.
Ahora bien, utilizamos la etiqueta de objeto directamente o knock up nuestros propios controles de servidor para representar nuestra preferencia de etiqueta de objeto.
Como una etiqueta de objeto se vería algo como esto: -
<form id="form1" runat="server" style="height:100%">
<div id="silverlightControlHost">
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
<param id="xapSource" runat="server" name="source" value="ClientBin/SilverlightApplication1.xap"/>
<param name="onError" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="4.0.50303.0" />
<param name="autoUpgrade" value="true" />
<param name="initParams" id="initParams" runat="server" />
<a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50303.0" style="text-decoration:none">
<img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
</a>
</object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>
</form>
Nota el ello y runat = "servidor" en el parámetro fuente. Con esto en lugar de la carga de la página podría ser algo como esto: -
protected void Page_Load(object sender, EventArgs e)
{
string xapPhysicalPath = Server.MapPath(xapSource.Attributes["value"]);
DateTime lastWrite = System.IO.File.GetLastWriteTime(xapPhysicalPath);
xapSource.Attributes["value"] = xapSource.Attributes["value"] + "?" + lastWrite.ToString("yyyyMMddThh:mm:ss");
}
Esto aseguraría la URL utilizada para la fuente cambiaría siempre cuando el XAP ha cambiado. El código original con el que se ha cruzado es defectuoso, ya que aún es posible que el cambio varíe sin que cambie el número de versión del ensamblaje totalmente desconectado.
No puedo acceder al objeto "param" ("xapSource" en su ejemplo) en código subyacente, intellisense no lo ve en absoluto. ¿Estoy haciendo algo mal? ¿Cómo se supone que debe verse en el archivo designer.cs? ¿Cuál es su tipo exacto? –
Muy bien, lo tengo para trabajar. Param no puede ser alcanzado programáticamente, es necesario utilizar esta solución: http://geekswithblogs.net/mbcrump/archive/2011/01/06/prevent-your-silverlight-xap-file-from-caching-in-your -browser.aspx –
Sí, estás haciendo algo mal. Debería verse como 'protected global :: System.Web.UI.HtmlControls.HtmlGenericControl xapSource;'. El tipo exacto es 'System.Web.UI.HtmlControls.HtmlGenericControl'. – AnthonyWJones