许多开发者在从.NET网站开发向Silverlight转型过程中往往都会经历一个比较郁闷的过度期: Silverlight作为镶嵌在网页中的插件,如何能像传统ASP.NET网页一样实现页面切换及参数传递等问题时常捆 饶着大家。解决之道我们还得从本质谈起。
ASP.NET网站主要是基于服务器端的开发(runat="server");由于在服务器中运行,因此ASPX动态页面操作 的都是服务器端对象,比如访问服务器中的数据库等;而Silverlight则是标准的客户端插件(<object …) ,如果去掉它的网页外壳(out-of-browser),它的形态与客户端软件几乎无差别,在安全使用范围内它能与用 户的电脑直接进行数据交互;相反,如果想通过Silverlight去访问网络上某台服务器中的数据库,则必须劳 驾第三者如WCF等作为传输中介。
因此,对于初学Silverlight的朋友我强烈建议大家深刻分清楚 服务器端 与 客户端 的区别,就像当初在 学习ASP.NET时,必须分清服务器端控件与客户端控件的区别一样。
大家先看个例子:我们创建一个Silverlight应用程序网站,此时整个解决方案中将包含两个项目分别为 Silverlight项目和Web网站项目,为了进行对比分析,我们在Web网站项目中添加一个ASP.NET页面,然后分别 在该两个项目中均编写代码一模一样的静态类Global.cs:
public static class Global {
public static int num = 50;
}
接着在Index.aspx页面中添加一个按钮,每次点击时num值增加50:
Index.aspx:
<div>
<asp:Button ID="button1" Text="确定" runat="server" OnClick="button1_OnClick" />
<asp:TextBox ID="textBox1" runat="server" />
</div>
Index.aspx.cs:
protected void button1_OnClick(object sender, EventArgs e) {
Global.num += 50;
textBox1.Text = Global.num.ToString();
}
同样在MainPage.xaml中添加一个按钮,每次点击时num值也增加50:
MainPage.xaml:
<Canvas>
<Button x:Name="button1" Content="确定" Click="button1_Click"/>
<TextBox x:Name="textBox1" Canvas.Left="30" Width="85" />
</Canvas>
MainPage.xaml.cs
private void Button1_Click(object sender, RoutedEventArgs e) {
Global.num += 50;
textBox1.Text = Global.num.ToString();
}