none
如何向Sliverlight里传参数啊?? 急:( RRS feed

  • 问题

  •  

    我想实现这个功能
    在aspx?uid=abcde
    在aspx后台页面就可以通过request.querystring["uid"] 取出这个值
    在sliverlight 的后台也面如何取出这个参数呢,或者用其他方式实现向sliverlight也面传值功能呢?
    2008年12月21日 3:07

答案

  •  

    是啊,QueryString方法你在哪看到的?sdk有吗?没有怎么随便就使用呢?

    你要明白的是,Silverlight 是在客户端运行的,你传参数可以在客户端接收也可以在服务器端接收啊。

     

    在服务端接收:

    var param = "<%=Request.QueryString["uid"]>"

     

    Silverlight 调用js的变量即可

     

    另外一个方法

     

    <object id="slPlugin1" width="300" height="50"
                data="data:application/x-silverlight,"
                type="application/x-silverlight-2" >
                <param name="source" value="ClientBin/SilverlightApplication.xap"/>
                <param name="initParams"
                    value="uid=<%=Request.QueryString["uid"]>"/>
    </object>

    再一个方法:

    使用<asp : Silverlight
        ID="Xaml1"
        runat="server"

    在服务器端设置

     

    也可以使用 HTML桥来访问

     

    http://msdn.microsoft.com/zh-cn/library/cc189004(VS.95).aspx

     

    你应当多看看 silverlight.chm

     

    msdn免费下载

    2008年12月21日 12:47
    版主
  •  

    谢谢孟子的解答:

    我把标准答案写出来吧

    在单击“Submit”按钮时,转向SilverlightTestPage.aspx页面,并传递两个参数,如下代码所示:

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        Response.Redirect(String.Format("SilverlightTestPage.aspx?username={0}&email={1}",
            this.txtUserName.Text,
            this.txtEmail.Text));
    }

    使用InitParams

    第一种方法,我们自然会使用InitParams属性,在Silverlight宿主页面加载时,我们在ASPX页面中获取参数,并作为初始化参数传递给Silverlight应用程序,如下代码所示:

    protected void Page_Load(object sender, EventArgs e)
    {
        this.Xaml1.InitParameters = String.Format("username={0},email={1}",
            Request.QueryString["username"],
            Request.QueryString["email"]);
    }

    然后在Silverlight应用程序的UserControl中设置两个属性,如下代码所示:

    public String UserName
    {
        set {
            this.lblUserName.Text = value;
        }
    }
    
    public String Email
    {
        set {
            this.lblEmail.Text = value;
        }
    }

    这样就可以在Application_Startup事件中获取初始化参数,并传递给UserControl,如下代码所示:

    private void Application_Startup(object sender, StartupEventArgs e)
    {
        Page page = new Page();
        page.UserName = e.InitParams["username"];
        page.Email = e.InitParams["email"];
        this.RootVisual = page;
    }
     
    至于楼上的那位写错了,应该是
    void Page_Loaded(object sender, RoutedEventArgs e)
    {
        IDictionary<String, String> paras = HtmlPage.Document.QueryString;
        this.lblUserName.Text = paras["username"];
        this.lblEmail.Text = paras["emavoid Page_Loaded(object sender, RoutedEventArgs e)
    {
        IDictionary<String, String> paras = HtmlPage.Document.QueryString;
        this.lblUserName.Text = paras["username"];
        this.lblEmail.Text = paras["email"];
    }
    这样更简单Smile
    2008年12月21日 14:30

全部回复

  • 办法1 aspTongue Tiedilverlight,赋值给这个控件的属性即可

     

    http://msdn.microsoft.com/zh-cn/library/cc838274(VS.95).aspx

     

     

    办法2:<object 标签的<param 属性传,可以直接传递参数

     

     

    办法3:使用 DOM

    2008年12月21日 5:09
    版主
  • 很简单。
    在Silverlight里获取页面的Query String只需要:
    string val = HtmlPage.QueryString["foo"].ToString();
    2008年12月21日 7:20
  •  

    string val = HtmlPage.QueryString["foo"].ToString();
    我在page.xaml.cs的文件里写

     string val = System.Windows.Browser.HtmlPage.QueryString["foo"].ToString();

    语句提示出错啊????

    System.Windows.Browser.HtmlPage不包含QueryString的定义??

    2008年12月21日 10:37
  •  

    是啊,QueryString方法你在哪看到的?sdk有吗?没有怎么随便就使用呢?

    你要明白的是,Silverlight 是在客户端运行的,你传参数可以在客户端接收也可以在服务器端接收啊。

     

    在服务端接收:

    var param = "<%=Request.QueryString["uid"]>"

     

    Silverlight 调用js的变量即可

     

    另外一个方法

     

    <object id="slPlugin1" width="300" height="50"
                data="data:application/x-silverlight,"
                type="application/x-silverlight-2" >
                <param name="source" value="ClientBin/SilverlightApplication.xap"/>
                <param name="initParams"
                    value="uid=<%=Request.QueryString["uid"]>"/>
    </object>

    再一个方法:

    使用<asp : Silverlight
        ID="Xaml1"
        runat="server"

    在服务器端设置

     

    也可以使用 HTML桥来访问

     

    http://msdn.microsoft.com/zh-cn/library/cc189004(VS.95).aspx

     

    你应当多看看 silverlight.chm

     

    msdn免费下载

    2008年12月21日 12:47
    版主
  •  

    谢谢孟子的解答:

    我把标准答案写出来吧

    在单击“Submit”按钮时,转向SilverlightTestPage.aspx页面,并传递两个参数,如下代码所示:

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        Response.Redirect(String.Format("SilverlightTestPage.aspx?username={0}&email={1}",
            this.txtUserName.Text,
            this.txtEmail.Text));
    }

    使用InitParams

    第一种方法,我们自然会使用InitParams属性,在Silverlight宿主页面加载时,我们在ASPX页面中获取参数,并作为初始化参数传递给Silverlight应用程序,如下代码所示:

    protected void Page_Load(object sender, EventArgs e)
    {
        this.Xaml1.InitParameters = String.Format("username={0},email={1}",
            Request.QueryString["username"],
            Request.QueryString["email"]);
    }

    然后在Silverlight应用程序的UserControl中设置两个属性,如下代码所示:

    public String UserName
    {
        set {
            this.lblUserName.Text = value;
        }
    }
    
    public String Email
    {
        set {
            this.lblEmail.Text = value;
        }
    }

    这样就可以在Application_Startup事件中获取初始化参数,并传递给UserControl,如下代码所示:

    private void Application_Startup(object sender, StartupEventArgs e)
    {
        Page page = new Page();
        page.UserName = e.InitParams["username"];
        page.Email = e.InitParams["email"];
        this.RootVisual = page;
    }
     
    至于楼上的那位写错了,应该是
    void Page_Loaded(object sender, RoutedEventArgs e)
    {
        IDictionary<String, String> paras = HtmlPage.Document.QueryString;
        this.lblUserName.Text = paras["username"];
        this.lblEmail.Text = paras["emavoid Page_Loaded(object sender, RoutedEventArgs e)
    {
        IDictionary<String, String> paras = HtmlPage.Document.QueryString;
        this.lblUserName.Text = paras["username"];
        this.lblEmail.Text = paras["email"];
    }
    这样更简单Smile
    2008年12月21日 14:30
  • 不好意思,丢了一个Document,用下面的就可以了。

    System.Windows.Browser.HtmlPage.Document.QueryString["foo"];

    正如老孟所说的,Silverlight是在客户端运行的,那么获取QueryString这么简单的工作就不必交给服务器端了吧,而且Silverlight支持JavaScript,能够访问页面DOM,获取一个QueryString更不在话下。

    2008年12月30日 4:30