我尽量说得详细一点。
有一个需要分页的产品分类表
希望能达到如下的URL路径,
/category/1
/category/1/1
/category/1/2
/category/1/3
/category/1/4
/category/1/5
其中前面的1是分类ID,后面的数字是第几页。
所以我定义了二个分类的路由,一个带分页参数,一个不带。
不带参数的如下:
//不带分页的分类路由 routes.MapPageRoute("category", "category/{cid}", "~/category.aspx", true, null, new RouteValueDictionary(new { cid = "\\d+" }));
带参数的如下:
//带分页的分类页路由 routes.MapPageRoute("categoryPage", "category/{cid}/{page}", "~/category.aspx", true, null, new RouteValueDictionary(new { cid = "\\d+", page = "\\d+" }));
Category.aspx.cs后台代码:
public List<SoftMODEL> GetPageList() { int pageIndex=1; int pageSize=10; string obj = RouteData.Values["page"] as string; if (string.IsNullOrWhiteSpace(obj.ToString())) { pageIndex = 1; } else { pageIndex = Convert.ToInt32(obj); } return new BLL.SoftBLL().GetPageList(pageIndex, pageSize); }
前台:
<% IEnumerable<Ws2008.MODEL.SoftMODEL> model = GetPageList(); foreach (Ws2008.MODEL.SoftMODEL m in model) {%> <li> <a title="<%=m.Title %>" href="<%=GetRouteUrl("view",new{id=m.SoftID}) %>" class="pic"> <img width="140" height="98" src="/images/deep.jpg" alt="淘宝商城多格jQuery焦点图" /></a> <h2><a href="<%=GetRouteUrl("view",new{id=m.SoftID}) %>" title="note"><%=m.Title %></a></h2> <div class="info"> <span class="time"><%=m.AddDate %></span> </div> <div class="note"><%=m.Description %></div> </li> <%} %>
现在产生的问题就是在访问
/category/1/1
/category/1/2
/category/1/3
/category/1/4
/category/1/5时都正常,都能正确获取到数据。
但是在访问/category/1时报错,因为page参数null.
所以这里的参数应该怎么判断?我的想法是如果没有参数就让他赋值1,让他显示第一页内容。
目前我已经暂时解决了,用三元表达式。不知道大家还有没有更好的解决方案。
欢迎大家继续讨论,或者有更好的路由方案,二条路由能不能并成一条等。
obj.ToString() 有问题, 当 obj = null , ToString() 就会出错的了
恩。
总算从死思路里走出来了。
我一直是直接用string 来接收参数,所以造成这个问题。
这里先用object接收,先判断这个obj就好办了。