【问题标题】:Paging and routing in ASP.Net MVCASP.Net MVC 中的分页和路由
【发布时间】:2009-10-17 18:01:02
【问题描述】:

我关注Martijn Boland's 'Paging with ASP.NET MVC'。虽然很有帮助,但它提出了一些我不明白的问题。

Martijn 说:

在内部,寻呼机使用 RouteTable.Routes.GetVirtualPath() 到 渲染 url 以便页面 url 可以 通过路由配置来创建 好看的 url 例如 '/Categories/Shoes/Page/1' 而不是 '/Paging/ViewByCategory?name=Shoes&page=1'.

这就是他所说的:

private string GeneratePageLink(string linkText, int pageNumber)
  {
   var pageLinkValueDictionary = new RouteValueDictionary(this.linkWithoutPageValuesDictionary);
   pageLinkValueDictionary.Add("page", pageNumber);
   //var virtualPathData = this.viewContext.RouteData.Route.GetVirtualPath(this.viewContext, pageLinkValueDictionary);
   var virtualPathData = RouteTable.Routes.GetVirtualPath(this.viewContext.RequestContext, pageLinkValueDictionary);

   if (virtualPathData != null)
   {
    string linkFormat = "<a href=\"{0}\">{1}</a>";
    return String.Format(linkFormat, virtualPathData.VirtualPath, linkText);
   }
   else
   {
    return null;
   }
  }

这是如何工作的?当我使用它时,virtualPathData.VirtualPath 只是带回一个代表我的路由表中的第一个路由的 url,最后是一个“页面”参数,而不是一个代表当前上下文的 url。

此外,将“/Paging/ViewByCategory?name=Shoes&page=1”更改为“/Categories/Shoes/Page/1”的路由会是什么样子?

【问题讨论】:

    标签: asp.net-mvc routing


    【解决方案1】:

    我假设你有 Paging 控制器并且这个控制器有 ViewByCategory 操作。

    ViewByCategory 看起来像:

    public ActionResult ViewByCategory(string categoryName, int? page)
    {
      ....
    }
    

    路由看起来像

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
        routes.MapRoute(
            "RouteByCategory",
            "Categories/{categoryName}/Page/{page}",
            new { controller = "Paging", action = "ViewByCategory" }
        );
    
        routes.MapRoute(
            "RouteByCategoryFirstPage",
            "Categories/{categoryName}",
            new { controller = "Paging", action = "ViewByCategory", page = 1 }
        );
    
        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );
    }
    
    protected void Application_Start()
    {
        RegisterRoutes(RouteTable.Routes);
    }
    

    GeneratePageLink 将返回'/Categories/Shoes/Page/1' 格式的链接,因为它是路由表中第一个匹配的路由模式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-31
      • 2014-05-14
      • 1970-01-01
      • 2014-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多