web-dev-qa-db-ja.com

Routedata.Values [""]とは何ですか?

この質問に詳細に答える記事がないことに驚いています。 RouteData.Values[""]に関連する質問はほとんどありません。

私はこのコードを見ました:

public ActionResult Index()
{
    ViewBag.Message = string.Format("{0}---{1}--{2}",
        RouteData.Values["Controller"],
        RouteData.Values["action"],
        RouteData.Values["id"]);

    return View();
}

ここでは、基本的にコントローラーの「メタデータ」のように聞こえる可能性のある値を読み取ります。それとも、ViewがControllerに渡すことができるものですか?

16
Lost

RouteData.Valuesは、ルーティングを処理するクラスによって挿入された値/クエリ文字列値にアクセスするために使用されます。
あなたの場合、ルート設定クラスで定義されたルートには、引数が提供される追加パラメータがあります。
パラメーターは、コントローラー、アクション、IDです。
これらのパラメーターの引数は、コードのどこかに提供されているはずです。

いくつかのレベルをより高く始めるとより理にかなっているので、何を検索しているのかがわかります

  1. Global.asax.cs

    protected void Application_Start(object sender, EventArgs e)
    {
        routingActions.RegisterCustomRoutes(RouteTable.Routes);
    }
    
  2. 別のクラスは上記のメソッドを定義します:

    public void RegisterCustomRoutes(RouteCollection routes)
    {
        routes.MapPageRoute("searchdetails", "searchdetails/{orderID}/{PageIndex}/{PageSize}", "~/View/SearchDetails.aspx");
    }
    
  3. 次のコードは、ハイパーリンクを作成します。主な違いは、HREFの構築方法です。この場合、「searchdetails」は、ルート構成を含むクラスで定義されます。

    linkToDetails.HRef = GetRouteUrl("searchdetails",
                    new
                    {
                        orderID = someOrderID,
                        PageIndex = currentPageIndex,
                        PageSize = PageSize
                    });
    
  4. 最後に、ターゲットページでは、手順3で渡されたこの情報を使用する必要があります。ここで、RouteData.Values [""]を使用します。

    protected void Page_Load(object sender, EventArgs e)
    {
        var _orderid = Page.RouteData.Values["orderID"].ToString();
        var _PageIndex = Convert.ToInt32(Page.RouteData.Values["PageIndex"]);
        var _PageSize = Convert.ToInt32(Page.RouteData.Values["PageSize"]);
    }
    
18
pkamathk

RouteDataは基本的なControllerクラスの属性であるため、任意のコントローラーでRouteDataにアクセスできます。 RouteDataには、現在のリクエストのルーティング情報が含まれています。 RouteDataを使用して、以下に示すようにコントローラー、操作、またはパラメーター情報を取得できます。

適切なデータ型に変換するか、暗黙的な型変数varを使用する必要があることに注意してください。

4
BGC