1

コード :

public static void RegisterRoutes(System.Web.Routing.RouteCollection routes)
{
    routes.MapPageRoute("Partners Details", "Partner/{PartnerName}", "~/Partners/PartnerDetails.aspx", false, new RouteValueDictionary());
    routes.MapPageRoute("Partners Offers", "Partner/{PartnerID}", "~/Partners/Partners.aspx", false, new RouteValueDictionary());
}

これらのルート URL は、default.aspx ページの別のリンク タグから呼び出すことができますが、問題は、partners.aspx にアクセスしようとすると、PartnerDetails.aspx にリダイレクトされることです。そしてそれに対する解決策は何ですか?

4

1 に答える 1

1

したがって、問題は、データ型を除いてルートが同一であることです。ただし、constraintsこれらのルートの を指定していません。それでは、それをしましょう:

routes.MapPageRoute("Partners Details",
    "Partner/{PartnerName}",
    "~/Partners/PartnerDetails.aspx",
    false,
    new RouteValueDictionary(),
    new RouteValueDictionary() {
        "PartnerName", "[a-zA-Z\s]"
    });

routes.MapPageRoute("Partners Offers",
    "Partner/{PartnerID}",
    "~/Partners/Partners.aspx",
    false,
    new RouteValueDictionary(),
    new RouteValueDictionary() {
        "PartnerID", @"\d"
    });

しかし、これを分解しましょう。Regex を使用して、キーのconstraints場所の文字列値 (PartnerID など) が一致するかどうかを判断します。そうでない場合、ルートはスキップされ、次のルートに進みます。しかし、なぜそれがうまくいかなかったのかについても考えてほしい。ルートを解釈するコードを書く必要があり、次のようなリンクを取得したとしましょう:

http://.../Partner/123

それは一致しません"Partner/{PartnerName}"か?つまり{PartnerName}、決して入力されていないということです。それは単なるプレースホルダーですよね?

うまくいけば、それは理にかなっています。

于 2013-04-13T09:37:47.597 に答える