在使用ASP.NET 4 URL路由时,我是否仍应使用查询字符串作为页码等?

时间:2010-04-20 17:11:52

标签: webforms url-routing asp.net-4.0

我从Intelligencia的UrlRewriter切换到ASP.NET 4.0中的新Web表单路由。我对它的基本页面非常有用,但是,在我的电子商务网站中,当浏览类别页面时,我之前使用了内置到我的寻呼机控件中的查询字符串来控制分页,现在我不知道如何使用路由来处理它。 / p>

我将MapPageRoute定义为:

routes.MapPageRoute("cat-browse", "Category/{name}_{id}", ~/CategoryPage.aspx");

这很有效。现在,有人点击进入第2页。之前我刚刚在网页上添加了#page = 2。如何使用Web表单路由处理此问题?我知道我可以这样做:

http://www.mysite.com/Category/Arts-and-Crafts_17/page/2

但除了页面,我还可以有过滤器,年龄范围,性别等。

  1. 我应该继续定义路线 处理这些变量就像 以上?
  2. 我应该继续使用查询字符串吗? 如果是这样,你如何定义一条路线 处理那个?

2 个答案:

答案 0 :(得分:4)

使用网址路由的主要原因是公开干净,用户和SEO友好的网址。如果这是你的目标,那么试着坚持下去,不要使用查询字符串参数。注意:我不认为我们需要完全禁止使用查询字符串,并且根据您的具体情况,您可能决定最好使用查询字符串参数来查找不经常使用的参数,或者在没有添加实际值的情况下使用信息更具语义意义。

所以这就是我要做的事情:

为所有其他参数定义一个全包式:

routes.MapPageRoute("cat-browse", "Category/{name}_{id}/{*queryvalues}", "~/CategoryPage.aspx"); 

在/CategoryPage.aspx中,访问router参数,然后根据需要进行解析:

Page.RouteData.Values["queryvalues"]

我不是使用Arts-and-Crafts_17/**page/2/age/34**的语法来表示这些参数,而是使用以下语法:Arts-and-Crafts_17/pg-2/age-34/

如果你这样做,catch-all参数'querystring'将等于pg-2 / age-34。您现在可以轻松地解析此数据并将每个名称/值添加到页面上下文中。请注意,您需要在这些行中执行某些操作,因为每个参数在您的站点上都是可选的。

答案 1 :(得分:-1)

您可以利用C#4.0命名和可选参数。请查看来自haacked的example

如果您使用较低版本的框架,您还可以使用上面链接中的代码。但不是将方法声明为

public ActionResult Search(int? page=0)
{}

您可以将其声明为

public ActionResult Search(int? page)
{
   if(page == null)
   {
     page=0;
   }
}

HTH