2011-08-15 9 views
2

ASP.NETルーティングを使用して、URLをサイトの任意の数のセクションにマップしています。それらはすべて同じページで処理されますが、私は異なるURLを使いたいと思います。たとえばmysectionのための私のblogセクション
http://site.com/mysectionためASP.NETルーティングでページにクエリ文字列を渡す

http://site.com/blogなど

のために、これらのセクションの数に制限はありませんが、彼らはすべてのLister.aspxによって処理されます。 コンテンツを扱う別のページもあります。内容は、ContentView.aspxという名前です。次のように私のルートは以下のとおりです。(猫はカテゴリのリストです)

cats.ForEach(c => 
     { 
      table.Add(new Route(c.ShortName, new PageRouteHandler("~/Lister.aspx?cat=" + c.ID),)); 
      table.Add(new Route(c.ShortName + "/{id}", new PageRouteHandler("~/ContentView.aspx"))); 
      table.Add(new Route(c.ShortName + "/{id}/{title}", new PageRouteHandler("~/ContentView.aspx"))); 
     }); 

のは、私はID 123とタイトルhelloでブログ記事を持っているとしましょう:
ユーザーを彼らはまた、単に使用することができますhttp://site.com/blog/123/hello
でアクセスすることができますID http://site.com/blog/123
コンテンツビューアの代わりにリスターページを指し示すようにhttp://site.com/blogしたいと思います。また、どのカテゴリ(blogまたはmycategoryなど、動的に作成されたもの)を区別するためにカテゴリIDが必要です。表示。私はカテゴリーIDをクエリー・ストリングに渡そうとしていますが、リスター・ページは呼び出されますが、照会ストリングはありません。なぜこのような振る舞いがあり、カテゴリーIDをリスターページに送ることができますか?

答えて

1

IRouteHandlerを実装した独自のRouteHandlerを作成して、コンストラクタ(カテゴリID)に別のパラメータを渡すことをお勧めします。

次に、GetHttpHandlerでは、そのIDをHttpContextを使用してページに渡すことができます。

ような何か:

public class CategoryRouteHandler : IRouteHandler 
{ 
    private string _virtualPath; 
    private string _category; 

    public CategoryRouteHandler(string virtualPath, string category) 
    { 
     _virtualPath = virtualPath; 
     _category = category; 
    } 

    public IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
     var handler = BuildManager.CreateInstanceFromVirtualPath(
      _virtualPath, typeof(Page)) as IDefaultHttpHandler; 

     HttpContext.Current.Items["Category"] = _category; 

     return handler; 
    } 
} 

次にあなたが使用することができます。

table.Add(new Route(c.ShortName, new CategoryRouteHandler("~/Lister.aspx", c.ID),)); 

そしてリスターのコードからあなたはHttpContext.Current.Items["Category"]

編集にアクセスすることができた:コードを修正するために更新、申し訳ありませんが、初めてテストしませんでした。

+0

コードに2つのエラーがあります:CategoryRouteHandlerの基本クラスは何ですか?GetHttpHandlerメソッドは何を返しますか?私は、基本クラスとしてPageRouteHandlerを使用し、現在のIHttpHandlerを返すことで動作させようとしましたが、その値をページに渡すことはできませんでした。 –

+1

申し訳ありません、編集しましたが、うまくいくと思います。 – thelsdj

関連する問題