19

令我惊讶的是,没有任何文章可以详细回答这个问题。我有几个与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 的东西?

4

2 回答 2

19

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"]);
    }
    
于 2015-03-03T03:40:38.743 回答
7

RouteData 是基本 Controller 类的一个属性,因此您可以在任何控制器中访问 RouteData。RouteData 包含当前请求的路由信息​​。您可以使用 RouteData 获取控制器、操作或参数信息,如下所示。

请注意,您需要转换为适当的数据类型或使用隐式类型变量 var。

于 2018-09-06T06:45:02.443 回答