在这技术中,利用了silverlight的一个属性:source.这个属性指示当前的silverlight的XAMl文件从哪个地方读取。
然后,我们只需要动态地从客户端来变换XAML文件,就可以动态变换前台的XAML文件了。
关键代码如下:
1 首先,在silverlight页面中做一些初始化工作:
<body onload="root_Loaded()">
<form id="form1" runat="server">
<div id="slContent">
<script type="text/javascript">
createSilverlight();
</script>
<script type="text/javascript">
function root_Loaded() {
<%
string strValue;
if(Request.Params["ID"] == null)
strValue = "1";
else
strValue = Request.Params["ID"];
%>
var ID = '<% Response.Write(strValue); %>';
var theHost = document.getElementById("AgControl1");
theHost.source = "Data.aspx?ID=" + ID;
}
</script>
</div>
</form>
</body>
可以看到,当这个页面Load完成以后,调用了页面Data.aspx,并且传递了参数,然后将这个Data页面的返回结果直接赋值给了silverlight的source,这样,就直接完成了动态改变前台XAMl文件的功能。<form id="form1" runat="server">
<div id="slContent">
<script type="text/javascript">
createSilverlight();
</script>
<script type="text/javascript">
function root_Loaded() {
<%
string strValue;
if(Request.Params["ID"] == null)
strValue = "1";
else
strValue = Request.Params["ID"];
%>
var ID = '<% Response.Write(strValue); %>';
var theHost = document.getElementById("AgControl1");
theHost.source = "Data.aspx?ID=" + ID;
}
</script>
</div>
</form>
</body>
2 看Data.aspx是怎么从服务器端返回XAMl的:
在服务器端Pageload中,
xmlDoc.Load(Server.MapPath("template.xaml"));
Response.ContentType = "text/xml";
Response.Write(xmlDoc.InnerXml);
这样,就可以直接返回给客户端一个XAMl文件。Response.ContentType = "text/xml";
Response.Write(xmlDoc.InnerXml);
代码下载:https://files.cnblogs.com/silverlighter/LM_ASPNET_AGC1.zip
原文章地址:http://channel9.msdn.com/Showpost.aspx?postid=304524
这段代码后来又被我篡改,成了定时从服务器端获取XAMl文件,来更新客户端的了。呵呵,原来Silvelright也能Ajax!