概述

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相关推荐

  1. 一步一步学Silverlight 2系列(3):界面布局

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  2. 一步一步学Silverlight 2系列(10):使用用户控件

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  3. 一步一步学Silverlight 2系列(24):与浏览器交互相关辅助方法

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  4. 一步一步学Silverlight 2系列(18):综合实例之RSS阅读器

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  5. 一步一步学Silverlight 2系列(9):使用控件模板

    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://terrylee.blog.51cto.com/342737/67243 ...

  6. 一步一步学Silverlight 2系列(32):图形图像综合实例—“功夫之王”剧照播放_转载...

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  7. 一步一步学Silverlight 2系列(21):如何在Silverlight中调用JavaScript

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  8. 一步一步学Silverlight 2系列(12):数据与通信之WebClient

    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://terrylee.blog.51cto.com/342737/67249 ...

  9. 一步一步学Silverlight 2系列(5):实现简单的拖放功能

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

最新文章

  1. liunx之tar 命令
  2. POJ 2391 Ombrophobic Bovines ★(Floyd+二分+拆点+最大流)
  3. JS 之 innerHTML
  4. 一步一图一代码之排序二叉树
  5. 线程A向队列Q中不停写入数据,线程B从列队Q中不停读取数据(只要Q中有数据)。
  6. exists的用法 python_5 年 Python ,总结的 10 条 Python 使用技巧
  7. matlab 性能分析方法,DPCM,PSK系统的MATLAB实现及性能分析
  8. 自然场景人脸检测技术实践
  9. arcengine遍历属性表_小程序导出数据到excel表
  10. 区别vue的this和JTopo中的this
  11. yum安装Apache Web Server后各个文件存放位置
  12. 优雅的使用Python之软件管理
  13. js Math对象属性和方法
  14. 它又又又来了,Fastjson 最新高危漏洞来袭!快升级吧
  15. 计算机室 多媒体教室制度,多媒体教室计算机室规章制度.doc
  16. Ubuntu安装jdk8
  17. JavaScript基础的全部东东
  18. 技术美术知识学习_04:PBR的个人理解
  19. macos 切换用户_如何在macOS上使用TouchID即时切换用户
  20. 水面无人艇局部危险避障算法研究 参考文献

热门文章

  1. php面试常问的问题
  2. ASP.NET 学习笔记_13 文章发布管理小系统
  3. Oracle+Python适合 Oracle DBA 使用的 Python
  4. GDB 使用详解-----转载
  5. 使用TS自动抓取镜像
  6. c语言 宏 变长参数,科学网—C/C++中处理变长参数函数(Variadic Function)的几个宏 - 彭彬的博文...
  7. String 的普通构造函数、拷贝构造函数、析构函数、赋值函数
  8. 去除MFC窗口的自动记忆功能
  9. jQ 插件 iscroll.js
  10. Atitit.提升软件Web应用程序 app性能的方法原理 h5 js java c# php python android .net