2

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

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

キュール。サイトを起動すると、このルートが正しく選択されます。

ここで、プログラムで次のことを実行しようとすると、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

なぜこれが起こるのでしょうか?

Home ルートを見つけて、クエリ文字列項目として見つからない値を追加するという印象を受けましたか?

アップデート

これではまだ運がありません。また、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 ですか?

4

3 に答える 3

1

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

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

return RedirectToRoute("IndexDefault", new {page = "2"}); 
于 2008-11-07T15:57:26.483 に答える
1

あなたのルートは次のようになるべきだと思います:

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 が取得されます。

于 2008-11-07T17:45:38.950 に答える
0

Phil の Route Tester を確認してください。

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

于 2008-11-08T05:11:21.577 に答える