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

Это имеет больше смысла, когда вы начинаете на несколько уровней выше, чтобы вы знали, что вы ищете.

  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"]);
    }
    

RouteData является атрибутом базового класса Controller, поэтому вы можете получить доступ к RouteData в любом контроллере. RouteData содержит информацию о маршрутизации для текущего запроса. Вы можете использовать RouteData для получения информации о контроллере, операции или параметре, как показано ниже.

Обратите внимание, что вам нужно преобразовать данные в соответствующий тип данных или использовать переменную неявного типа var.

Другие вопросы по тегам