加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.Net MVC中的分页和路由

发布时间:2020-12-15 23:48:12 所属栏目:asp.Net 来源:网络整理
导读:我跟随 Martijn Boland’s ‘Paging with ASP.NET MVC’.虽然有帮助但它提出了一些我不明白的问题. Martijn说: Internally,the pager uses RouteTable.Routes.GetVirtualPath() to render the url’s so the page url’s can be configured via routing to
我跟随 Martijn Boland’s ‘Paging with ASP.NET MVC’.虽然有帮助但它提出了一些我不明白的问题.

Martijn说:

Internally,the pager uses
RouteTable.Routes.GetVirtualPath() to
render the url’s so the page url’s can
be configured via routing to create
nice looking url’s like for example
‘/Categories/Shoes/Page/1′ instead of
‘/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,表示路由表中的第一个路由,最后是一个’page’参数,而不是一个代表当前上下文的url.

此外,路由是什么样的将’/ Paging / ViewByCategory?name = Shoes& page = 1’更改为此’/ Categories / Shoes / Page / 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}",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’格式返回链接,因为它首先匹配路由表中的路由模式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读