質問

次の1つのルートがglobal.asaxに登録されています。

routes.MapRoute(
    "Home", // Unique name
    "", // Root url
    new { controller = "Home", action = "Index", 
        tag = string.Empty, page = 1 }
);

kewl。サイトを開始すると、このルートが正しく選択されます。

今、プログラムで次のことを行おうとすると、NULLが返されます。

var pageLinkValueDictionary = 
    new RouteValueDictionar(linkWithoutPageValuesDictionary)
        {{"page", 2}};

VirtualPathData virtualPathData = 
    RouteTable.Routes.GetVirtualPath(viewContext, "Home"
        pageLinkValueDictionary);

// NOTE: pageLinkValueDictionary == 
//     Key: Action, Value: Index; Key: page, Value: 2

なぜこれが起こるのですか?

ホームルートは検出するが、クエリ文字列アイテムとして検出されない値は追加するという印象を受けましたか

更新

これでもまだ運がありません。また、 MVC RC 、今度はviewContextをveiwContext.RequestContext ..に変更する必要があります。これはコンパイルされますが、まだnullの結果が得られています。

更新2

page = 1 のデフォルトアイテムのないルートがある場合、ルートは IS FOUND です。 例:

routes.MapRoute(
        "Home",
        "",
        new { controller = "Post", action = "Index", tags = string.Empty }
    );

..および RouteTable.Routes.GetVirtualPath は、 VirtualPathData インスタンスを返します。 page = 1 (デフォルト値)を追加して戻すと、返される VirtualPathData インスタンスはnullですか?

役に立ちましたか?

解決

nullを返す理由は、「ページ」のあるルートがないためです。ルートデータ。

達成しようとしていることを少し拡大していただけますか? url / page / 2または/?page = 2のページにリダイレクトする場合は、RedirectToRouteまたはRedirectToActionを使用する必要があります。

return RedirectToRoute("IndexDefault", new {page = "2"}); 

他のヒント

ルートは次のようになっていると思います:

route.MapRoute("theRoute", "{controller}/{action}/{tag}/{page}",
  new { controller="Post", action="Index", tag="", page=1 });

または(完全なURLの外観に応じて)...

route.MapRoute("theRoute", "/{tag}/{page}",
  new { controller="Post", action="Index", tag="", page=1 });

これは、 http://mysite.com/ へのリクエストと一致し、デフォルトのルート値に移動します上記で定義されています。ただし、タグまたはページを指定すると、必要なURLが取得されます。

Philのルートテスターを確認する必要があります。

ASP.NETルーティングデバッガー

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top