zoukankan      html  css  js  c++  java
  • Silverlight和ASP.NET相互传参的两种常用方式(QueryString,Cookie)

    参考自:http://www.cnblogs.com/chengxingliang/archive/2011/04/14/2015085.html

    在本节中将讲述Silverlight和ASP.NET页面的相互传参的两种常用方式:Cookie和QueryString。首先我们新建一个名为SLConnectASP.NET的Silverlight应用程序,然后在SLConnectASP.NET.web项目中添加一个Index.aspx的页面。

            一、Silverlight和ASPX页面的QueryString传参

            实现思路:在Silverlight端跳转到页面到Index.aspx并且传递一个QueryString参数ID,在该Index.aspx页面显示出ID。在Index.aspx页面有一个按钮可以向Silverlight所在页面传递一个参数aspxid,在Silverlight端读取aspxid参数并且显示出来。

            首先我们看Silverlight后台代码:

    复制代码
    #region QueryString传值
    //QueryString步骤一
    private void button2_Click(object sender, RoutedEventArgs e)
    {
    //传递参数给Asp.net页面
    HtmlPage.Window.Eval("location='" +
    Application.Current.Host.Source.AbsoluteUri.Replace(
    Application.Current.Host.Source.AbsolutePath,
    "") + "/index.aspx?id=203';");
    }
    //QueryString步骤四
    private void ShowQueryString()
    {
    //接收到ASP.NET页面传送过来的QueryString值
    IDictionary<String, String> paras = HtmlPage.Document.QueryString;
    if (paras.ContainsKey("aspxid"))
    {
    this.label1.Content = "获取到ASP.NET传值:" + paras["aspxid"];
    }
    }
    #endregion
    复制代码

            然后我们来看Index.aspx.cs的代码如下:

    复制代码
    #region ASP.NET端操作Silverlight传输过来的QueryString值
    //QueryString步骤二
    private void BindQueryString()
    {
    //ASP.NET端获取到Silverlight传输过来的QueryString值
    if (Request.QueryString.Count > 0)
    {
    this.Label1.Text = "获取到的Silverlight客户端QueryString值是:"
    + Request.QueryString["id"].ToString();
    }
    }
    //QueryString步骤三
    protected void Button1_Click(object sender, EventArgs e)
    {
    //回传QueryString值给Silverlight客户端
    Response.Redirect("./SLConnectASP.NETTestPage.aspx?aspxid=109");
    }
    #endregion
    复制代码

            二、Silverlight和ASPX页面的Cookie传参

            实现思路:在Silverlight端创建一个Key名为FirCookieKey,Value值为FirCookieValue的Cookie,然后跳转页面到Index.aspx页面,在该页面显示出来。在该页面有一个按钮可以修改这个Cookie,并且跳转回Silverlight端,在Silverlight端读取这个已经被修改过的Cookie并且显示出来。

            首先我们看Silverlight端的后台代码MainPage.xaml.cs:包括步骤一创建Cookie、步骤四读取被修改过的Cookie

    复制代码
    #region Cookie传值
    //Cookie步骤一
    private void button1_Click(object sender, RoutedEventArgs e)
    {

    //编写一个键为FirCookieKey,值为FirCookieValue的Cookie
    string oldCookie = HtmlPage.Document.GetProperty("cookie") as String;
    DateTime expiration
    = DateTime.UtcNow + TimeSpan.FromDays(2000);
    string cookie = String.Format("{0}={1};expires={2}", "FirCookieKey",
    "FirCookieValue", expiration.ToString("R"));
    HtmlPage.Document.SetProperty(
    "cookie", cookie);
    //跳转界面
    HtmlPage.Window.Eval("location='" +
    Application.Current.Host.Source.AbsoluteUri.Replace(
    Application.Current.Host.Source.AbsolutePath,
    "") + "/index.aspx';");

    }
    //Cookie步骤四
    private void ShowCookie()
    {
    //显示当前键为FirCookieKey的Cookie值
    String[] cookies = HtmlPage.Document.Cookies.Split(';');
    foreach (String cookie1 in cookies)
    {
    String[] keyValues
    = cookie1.Split('=');
    if (keyValues[0] == "FirCookieKey")
    {
    this.textBox2.Content = "Cookie的Key值是:" + keyValues[0];
    this.textBox1.Content = "Cookie的Value值是:" + keyValues[1];

    }
    };
    }
    #endregion
    复制代码

             接着我们来看Index.aspx.cs,包括Cookie操作二和Cookie操作三

    复制代码
    #region ASP.NET端获取到操作Cookie值
    //Cookie操作二
    private void BindCookie()
    {
    // ASP.NET端获取到Silverlight传输过来的Cookie值
    HttpCookie cookie = Request.Cookies["FirCookieKey"];
    if (cookie.Value != null)
    {
    this.Label2.Text = "获取到的Silverlight客户端Cookie值:" + cookie.Value;
    }

    }
    //Cookie操作三
    protected void Button2_Click(object sender, EventArgs e)
    {
    //回传重新设置Cookie值然后传输给Silverlight
    HttpCookie cookie = Request.Cookies["FirCookieKey"];
    cookie.Value
    = "NewCookieValue";
    HttpContext.Current.Response.Cookies.Add(cookie);
    Response.Redirect(
    "./SLConnectASP.NETTestPage.aspx");
    }
    #endregion
    复制代码

            最后这两个实例的MainPage.xaml的代码如下:

    复制代码
    <Grid x:Name="LayoutRoot" Background="White">
    <sdk:Label Height="27" HorizontalAlignment="Left" Margin="41,25,0,0"
    Name
    ="label1" VerticalAlignment="Top" Width="284" />
    <Button Content="传送浏览器参数" Height="38" HorizontalAlignment="Left"
    Margin
    ="41,63,0,0" Name="button2" VerticalAlignment="Top"
    Width
    ="113" Click="button2_Click" />

    <sdk:Label Height="27" HorizontalAlignment="Left" Margin="41,116,0,0"
    Name
    ="textBox2" VerticalAlignment="Top" Width="284" />
    <sdk:Label Height="27" HorizontalAlignment="Left" Margin="41,149,0,0"
    Name
    ="textBox1" VerticalAlignment="Top" Width="284" />
    <Button Content="设置Cookie值" Height="38" HorizontalAlignment="Left"
    Margin
    ="41,194,0,0" Name="button1" VerticalAlignment="Top"
    Width
    ="113" Click="button1_Click" />
    </Grid>
    复制代码

            Index.aspx的代码如下:

    复制代码
    <div>

    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    <br />
    <br />
    <asp:Button ID="Button1" runat="server" Text="回传值给Silverlight应用程序QueryString"
    onclick
    ="Button1_Click" />

    <br />
    <br />

    <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
    <br />
    <asp:Button ID="Button2" runat="server"
    Text
    ="回传值给Silverlight应用程序Cookie" onclick="Button2_Click"
    />

    <br />

    </div>
    复制代码

            本实例采用VS2010+Silverlight 4.0编写。如需源码请点击 SLConnectASP.NET.rar 下载。本实例效果图如下:

  • 相关阅读:
    silverlight 中缓存应用程序相应的库文件
    Silverlight 4 Unleashed 读书笔记:第二章
    使用虚拟打印机提交文档的文本
    ORACLE 中为什么要把列名都转换成大写字母?
    在 silverlight 自由绘图(WriteableBitmapEx)
    新的 WINDOWS 2003 系统上装了 TOMCAT 6 启动不了
    计算两个坐标所形成的角的角度
    在 Silverlight 绘制线帽(箭头)
    Linux下安装memecache缓存程序
    Linux下安装、配置、启动Apache
  • 原文地址:https://www.cnblogs.com/jsping/p/2705172.html
Copyright © 2011-2022 走看看