ホーム > .NET, ASP.NET 備忘録 > ちょっと先取り Routing 4:その2 Page.RouteData じゃなくて Page.GetRouteData()

ちょっと先取り Routing 4:その2 Page.RouteData じゃなくて Page.GetRouteData()

この記事は その1 の記事を前提にしています。
まずはそちらを見てください。

ASP.NET 4 で予定されている Page.RouteData という形でPageのプロパティとしてRoutingのデータを取り出すには、HttpContextクラスやPageクラス自体に変更を加える必要があります。
そこで、ここでは拡張メソッドを利用してPageクラスにRoutingデータを取り出すGetRouteDataメソッドを追加することにしました。

web.configファイルの system.web/compilation/assemblies 要素に以下の記述を追加します。

<add assembly=”System.Web.Abstractions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35″/>

このdll参照設定がないと、コンパイル時にアセンブリが足りない、といったエラーになります。

さて、PageExtentionクラスを追加し、以下のとおりに記述します。

using System.Web;
using System.Web.UI;
using System.Web.Routing;

public static class PageExtention
{
    public static string GetRouteData(this  Page p, string term)
    {
        var r =  RouteTable.Routes.GetRouteData(new HttpContextWrapper(HttpContext.Current));
        return r != null ? r.Values[term].ToString() : string.Empty;
    }
}

これで準備完了。
Default2.aspxにLabelを貼り付けて、コードビハインド側に以下のように記述しましょう。

protected void Page_Load(object sender, EventArgs e)
{
    Label1.Text = “ID: ” + this.GetRouteData(“id”);
}

デバッグを実行して、次のURLにアクセスします。

http://localhost:(port)/RoutingTest/test/3

間違えたところがなければ、ブラウザ上には「ID:3」と表示されるはずです。
では、次のURLだとどうなるでしょう。

http://localhost:(port)/RoutingTest/test/

実はこの場合、「ID:1」と表示されます。
その1 の記事の中でRoutingの設定を行っていますが、そこでidのデフォルト値として1を設定していますので、こんな結果がでることになります。

カテゴリー:.NET, ASP.NET 備忘録
  1. まだコメントはありません。
  1. No trackbacks yet.

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。