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

c# – 在MVC中映射分页路由

发布时间:2020-12-15 21:13:38 所属栏目:百科 来源:网络整理
导读:我使用的分页类非常类似于NerdDinner示例中使用的类.分页方面工作正常,但我正在努力让所有路由正常工作. 目前我们有一个MapRoute集: routes.MapRoute( "Default",// Route name "{controller}/{action}/{id}/{page}",// URL with parameters new { controll
我使用的分页类非常类似于NerdDinner示例中使用的类.分页方面工作正常,但我正在努力让所有路由正常工作.

目前我们有一个MapRoute集:

routes.MapRoute(
            "Default",// Route name
            "{controller}/{action}/{id}/{page}",// URL with parameters
            new
            {
                controller = "Home",action = "Index",id = UrlParameter.Optional,page = UrlParameter.Optional
            } // Parameter defaults
        );

我们希望URL而不是/ mycontroller / myaction / 1/5是/ mycontroller / myaction / 1 / page5,这样对用户来说更有意义.我现在找不到办法做到这一点.

其次,我们如何设置路线,以便动作也可以与分页一起使用.即/ controller / page1而不是/ controller / index / page1

解决方法

你应该有两条路线:

首先是分页(将使用默认控制器和操作):

routes.MapRoute(
        "Default",// Route name
        "home/{id}/{page}",// URL with parameters
        new
        {
            controller = "Home",page = UrlParameter.Optional
        } // Parameter defaults
    );

所有控制器的最后路线:

routes.MapRoute(
        "Default",// Route name
        "{controller}/{action}/{id}/{page}",page = UrlParameter.Optional
        } // Parameter defaults
    );

所以上面的路由/ home / 1 / page5将由home controller index action处理,
但是someController / someAction / 1 / page5是第二条路线.

您应该知道,首先您需要放置处理较少网址和 – 常用路由的路由,例如上面的所有控制器的第二条路由.

在控制器操作内部,您可以像这样retreview route参数:

string page = RouteData.Values["page"];

所以对于上面的示例页面中的url home / 1 / page5将等于’page5′,而不是可以解析此字符串以获取页码.

至于我,我使用以下方法从路径数据,帖子正文,查询字符串中获取参数:

protected T GetQueryParam<T>(String name,T defValue = default(T))
        {
            String param = HttpContext.Request.QueryString.Get(name);
            if (String.IsNullOrEmpty(param))
                param = HttpContext.Request.Params[name];
            if ( String.IsNullOrEmpty(param))
                param = (String) RouteData.Values[name] ?? String.Empty;

            if (String.IsNullOrEmpty(param) )
                return defValue;

            return (T)Convert.ChangeType(param,typeof(T));
        }

因此,如果您需要使用上述方法获取页面,您只需要执行以下操作:

var page = GetQueryParam<string>("page");// in case if page parameter not exists default value for type will be returned

(编辑:李大同)

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

    推荐文章
      热点阅读