この質問に詳細に答える記事がないことに驚いています。 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に渡すことができるものですか?
RouteData.Valuesは、ルーティングを処理するクラスによって挿入された値/クエリ文字列値にアクセスするために使用されます。
あなたの場合、ルート設定クラスで定義されたルートには、引数が提供される追加パラメータがあります。
パラメーターは、コントローラー、アクション、IDです。
これらのパラメーターの引数は、コードのどこかに提供されているはずです。
いくつかのレベルをより高く始めるとより理にかなっているので、何を検索しているのかがわかります
Global.asax.cs
protected void Application_Start(object sender, EventArgs e)
{
routingActions.RegisterCustomRoutes(RouteTable.Routes);
}
別のクラスは上記のメソッドを定義します:
public void RegisterCustomRoutes(RouteCollection routes)
{
routes.MapPageRoute("searchdetails", "searchdetails/{orderID}/{PageIndex}/{PageSize}", "~/View/SearchDetails.aspx");
}
次のコードは、ハイパーリンクを作成します。主な違いは、HREFの構築方法です。この場合、「searchdetails」は、ルート構成を含むクラスで定義されます。
linkToDetails.HRef = GetRouteUrl("searchdetails",
new
{
orderID = someOrderID,
PageIndex = currentPageIndex,
PageSize = PageSize
});
最後に、ターゲットページでは、手順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"]);
}
RouteDataは基本的なControllerクラスの属性であるため、任意のコントローラーでRouteDataにアクセスできます。 RouteDataには、現在のリクエストのルーティング情報が含まれています。 RouteDataを使用して、以下に示すようにコントローラー、操作、またはパラメーター情報を取得できます。
適切なデータ型に変換するか、暗黙的な型変数varを使用する必要があることに注意してください。