一步一步学Silverlight 2系列(13):数据与通信之WebRequest
概述
Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython,对JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。《一步一步学Silverlight 2系列》文章带您快速进入Silverlight 2开发。
本文将简单介绍在Silverlight 2中如何使用WebRequest进行数据的提交和获取。
简单示例
在本文中,我们仍然使用在一步一步学Silverlight 2系列(12):数据与通信之WebClient中用过的示例,只不过稍微做一点小的改动,使用WebRequest提交书籍编号数据,并根据书籍号返回价格信息。最终运行的结果如下图:
编写界面布局,XAML如下:
<Grid Background="#46461F"><Grid.RowDefinitions><RowDefinition Height="40"></RowDefinition><RowDefinition Height="*"></RowDefinition><RowDefinition Height="40"></RowDefinition></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition></ColumnDefinition></Grid.ColumnDefinitions><Border Grid.Row="0" Grid.Column="0" CornerRadius="15"Width="240" Height="36"Margin="20 0 0 0" HorizontalAlignment="Left"><TextBlock Text="书籍列表" Foreground="White"HorizontalAlignment="Left" VerticalAlignment="Center"Margin="20 0 0 0"></TextBlock></Border><ListBox x:Name="Books" Grid.Row="1" Margin="40 10 10 10"SelectionChanged="Books_SelectionChanged"><ListBox.ItemTemplate><DataTemplate><StackPanel><TextBlock Text="{Binding Name}" Height="32"></TextBlock></StackPanel></DataTemplate></ListBox.ItemTemplate></ListBox><Border Grid.Row="2" Grid.Column="0" CornerRadius="15"Width="240" Height="36" Background="Orange"Margin="20 0 0 0" HorizontalAlignment="Left"><TextBlock x:Name="lblPrice" Text="价格:" Foreground="White"HorizontalAlignment="Left" VerticalAlignment="Center"Margin="20 0 0 0"></TextBlock></Border> </Grid>
编写HttpHandler,注意我使用了context.Request.Form["No"],在后面我们将使用WebRequest在RequestReady方法中将数据写入请求流:
public class BookHandler : IHttpHandler {public static readonly string[] PriceList = new string[] { "66.00","78.30","56.50","28.80","77.00"};public void ProcessRequest(HttpContext context){context.Response.ContentType = "text/plain";context.Response.Write(PriceList[Int32.Parse(context.Request.Form["No"])]);}public bool IsReusable{get{return false;}} }
在界面加载时绑定书籍列表,关于数据绑定可以参考一步一步学Silverlight 2系列(11):数据绑定。
private void UserControl_Loaded(object sender, RoutedEventArgs e) {List<Book> books = new List<Book>() { new Book("Professional ASP.NET 3.5"),new Book("ASP.NET AJAX In Action"),new Book("Silverlight In Action"),new Book("ASP.NET 3.5 Unleashed"),new Book("Introducing Microsoft ASP.NET AJAX")};Books.ItemsSource = books; }
接下来在SelectionChanged事件中实现用户选择书籍时,我们使用WebRequest提交书籍编号,并且获得价格数据,仍然采用异步模式,提供RequestReady和ResponseReady两个回调函数:
private string bookNo;void Books_SelectionChanged(object sender, SelectionChangedEventArgs e) {bookNo = Books.SelectedIndex.ToString();Uri endpoint = new Uri("http://localhost:49955/BookHandler.ashx");WebRequest request = WebRequest.Create(endpoint);request.Method = "POST";request.ContentType = "application/x-www-form-urlencoded";request.BeginGetRequestStream(new AsyncCallback(RequestReady), request);request.BeginGetResponse(new AsyncCallback(ResponseReady), request); }
实现RequestReady方法,将书籍的编号写入请求流中。
void RequestReady(IAsyncResult asyncResult) {WebRequest request = asyncResult.AsyncState as WebRequest;Stream requestStream = request.EndGetRequestStream(asyncResult);using (StreamWriter writer = new StreamWriter(requestStream)){writer.Write(String.Format("No={0}", bookNo));writer.Flush();} }
实现ResponseReady方法,显示返回的结果。
void ResponseReady(IAsyncResult asyncResult) {WebRequest request = asyncResult.AsyncState as WebRequest;WebResponse response = request.EndGetResponse(asyncResult);using (Stream responseStream = response.GetResponseStream()){StreamReader reader = new StreamReader(responseStream);lblPrice.Text = "价格:" + reader.ReadToEnd();} }
最后运行的结果如下:
用户选择一本书籍后,将显示其价格:
结束语
本文简单介绍了在Silverlight 2中如何使用WebRequest提交和获取数据,你可以从这里下载示例程序。
下一篇:一步一步学Silverlight 2系列(14):数据与通信之WCF
一步一步学Silverlight 2系列(13):数据与通信之WebRequest相关推荐
- 一步一步学Silverlight 2系列(3):界面布局
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 一步一步学Silverlight 2系列(10):使用用户控件
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 一步一步学Silverlight 2系列(24):与浏览器交互相关辅助方法
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 一步一步学Silverlight 2系列(18):综合实例之RSS阅读器
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 一步一步学Silverlight 2系列(9):使用控件模板
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://terrylee.blog.51cto.com/342737/67243 ...
- 一步一步学Silverlight 2系列(32):图形图像综合实例—“功夫之王”剧照播放_转载...
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 一步一步学Silverlight 2系列(21):如何在Silverlight中调用JavaScript
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 一步一步学Silverlight 2系列(12):数据与通信之WebClient
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://terrylee.blog.51cto.com/342737/67249 ...
- 一步一步学Silverlight 2系列(5):实现简单的拖放功能
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
最新文章
- liunx之tar 命令
- POJ 2391 Ombrophobic Bovines ★(Floyd+二分+拆点+最大流)
- JS 之 innerHTML
- 一步一图一代码之排序二叉树
- 线程A向队列Q中不停写入数据,线程B从列队Q中不停读取数据(只要Q中有数据)。
- exists的用法 python_5 年 Python ,总结的 10 条 Python 使用技巧
- matlab 性能分析方法,DPCM,PSK系统的MATLAB实现及性能分析
- 自然场景人脸检测技术实践
- arcengine遍历属性表_小程序导出数据到excel表
- 区别vue的this和JTopo中的this
- yum安装Apache Web Server后各个文件存放位置
- 优雅的使用Python之软件管理
- js Math对象属性和方法
- 它又又又来了,Fastjson 最新高危漏洞来袭!快升级吧
- 计算机室 多媒体教室制度,多媒体教室计算机室规章制度.doc
- Ubuntu安装jdk8
- JavaScript基础的全部东东
- 技术美术知识学习_04:PBR的个人理解
- macos 切换用户_如何在macOS上使用TouchID即时切换用户
- 水面无人艇局部危险避障算法研究 参考文献
热门文章
- php面试常问的问题
- ASP.NET 学习笔记_13 文章发布管理小系统
- Oracle+Python适合 Oracle DBA 使用的 Python
- GDB 使用详解-----转载
- 使用TS自动抓取镜像
- c语言 宏 变长参数,科学网—C/C++中处理变长参数函数(Variadic Function)的几个宏 - 彭彬的博文...
- String 的普通构造函数、拷贝构造函数、析构函数、赋值函数
- 去除MFC窗口的自动记忆功能
- jQ 插件 iscroll.js
- Atitit.提升软件Web应用程序 app性能的方法原理 h5 js java c# php python android .net