2015-03-03 4 views
13

Я с удивлением вижу, что нет статьи, которая отвечает на этот вопрос с любыми подробностями. У меня мало вопросов, связанных с 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 также может перейти к контроллеру?

ответ

14

RouteData.Values ​​используется для доступа к значениям/значениям querystring, вставленным маршрутизацией обработки классов.
В вашем случае маршрут, определенный в вашем классе конфигурации маршрута, содержит дополнительные параметры, для которых были бы предоставлены аргументы.
Параметры: контроллер, действие, идентификатор.
Аргументы этих параметров были бы предоставлены где-то в вашем коде.

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

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

Почему Page_Load в явно MVC-приложение? – Stack0verflow

+0

@ Stack0verflow У нас есть аналогичная настройка на сайте веб-форм. Вы можете это сделать, это просто не значение по умолчанию (в отличие от MVC). – Trisped

 Смежные вопросы

  • Нет связанных вопросов^_^