Что такое 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 также может передавать в контроллер?
2 ответа
RouteData.Values используется для доступа к значениям / значениям строки запроса, вставленным классами, обрабатывающими маршрутизацию.
В вашем случае у маршрута, определенного в вашем классе конфигурации маршрута, есть дополнительные параметры, для которых должны быть предоставлены аргументы.
Параметры: контроллер, действие, идентификатор.
Аргументы этих параметров были бы предоставлены где-то в вашем коде.
Это имеет больше смысла, когда вы начинаете на несколько уровней выше, чтобы вы знали, что вы ищете.
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.