locked
SilverlightでQueryStringを処理する方法について RRS feed

  • 質問

  • Silverlightでハイパーリンクを作成し、それをクリックしたら、次のような文字列を獲得するような
    プログラムを作成しました。

    http://localhost:1345/dg3371TestPage.aspx?staff_id=1007&staff_date=2011/10/03

    この文字列から、staff_id と staff_date の2つの変数の値(1007, 2011/10/03)を抜き出す簡単な
    方法はありませんでしょうか?

    リンク先で、IDictionary<string,string> qString = System.Windows.Browser.HtmlPage.Document.QueryString;
    という手もありますが、リンク先で処理をせずに、得られた文字列を処理して、画面遷移を
    行なわせたいと考えています。
    画面遷移は、下記のサイトを参考に行なっております。

    Silverlight 2 で大きく変わったコントロール -- 「画面遷移について」
    http://codezine.jp/article/detail/3427?p=3

    2011年10月13日 3:22

回答

  • どのように組まれているのかわかりませんが、例えばDataGridにTextBlockで文字列を表示し、そこをクリックしたらMouseLeftButtonUpイベントハンドラで、senderをTextBlockにキャストし、そのDataContextプロパティでバインドしているデータを取得することができます。あとはそのデータによって遷移先を切り分けることが可能です。これをC#で書けば以下のような感じになります。

    var model = (バンドしているクラス名)((TextBlock)sender).DataContext;

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2011年10月13日 5:32
    モデレータ

すべての返信

  • QueryStringとして処理しないのであれば、ハイパーリンクでGetを使う必要が無いように思います。ハイパーリンクとはせずに普通にSilverlightで処理するだけで良いのではないでしょうか? SilverlightとGetを混在させる理由が何かあるのでしょうか?

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2011年10月13日 4:29
    モデレータ
  • trapemiya様

    ご返事いただきましてありがとうございます。
    もとはASP.NETで書いていたので、そのときに、ハイパーリンクでQueryStringとしてデータを渡して、
    ページ遷移を実現していました。
    Silverlightで作り直したときに、それを踏襲しただけということと、ハイパーリンクにした方が、そこから
    QueryStringの各変数を抜き出すライブラリが利用できるかなと思っただけです。
    DataGridのセルをクリックして、そこからそのセルの状態に応じたページへ遷移できることができれば、
    ハイパーリンクにする必要はありませんが、ハイパーリンクが一番楽な方法かなと思いました。
    良い方法があれば、ご教示ください。

    2011年10月13日 4:56
  • どのように組まれているのかわかりませんが、例えばDataGridにTextBlockで文字列を表示し、そこをクリックしたらMouseLeftButtonUpイベントハンドラで、senderをTextBlockにキャストし、そのDataContextプロパティでバインドしているデータを取得することができます。あとはそのデータによって遷移先を切り分けることが可能です。これをC#で書けば以下のような感じになります。

    var model = (バンドしているクラス名)((TextBlock)sender).DataContext;

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2011年10月13日 5:32
    モデレータ
  • ご教示いただいたように、データバインドを使用して、DataContextでデータを設定・取得
    するようにしましたら、文字列を操作する必要は無くなり、シンプルにまとまりました。

    どうもありがとうございました。m(__)m

    P.S. バインディングの詳しいところは、このサイトを参考にいたしました。

    「Silverlight 2でのデータバインディング」
    http://codezine.jp/article/detail/3517

    2011年10月13日 7:52