1

我从 Intelligencia 的 UrlRewriter 切换到 ASP.NET 4.0 中的新 Web 表单路由。我让它在基本页面上工作得很好,但是,在我的电子商务网站中,当浏览类别页面时,我以前使用内置在我的寻呼机控件中的查询字符串来控制分页,现在不知道如何使用路由来处理这个问题。

我将 MapPageRoute 定义为:

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

这很好用。现在,有人点击转到第 2 页。以前我只是将 ?page=2 添加到 url。如何使用 Web 表单路由处理此问题?我知道我可以做类似的事情:

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

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

  1. 我应该像上面一样继续定义处理这些变量的路由吗?
  2. 我应该继续使用查询字符串吗?如果是这样,你如何定义一个路由来处理它?
4

2 回答 2

4

使用 url 路由的主要原因是公开干净、对用户和 SEO 友好的 URL。如果这是您的目标,请尝试坚持下去,不要使用查询字符串参数。注意:我不认为我们需要完全禁止使用查询字符串,并且根据您的情况,您可能会决定最好将查询字符串参数用于不经常使用的参数,或者通过使语义上更有意义的信息。

所以这就是我要做的:

为所有其他参数定义一个包罗万象:

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

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

Page.RouteData.Values["queryvalues"]

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

如果这样做,包罗万象的参数“querystring”将等于 pg-2/age-34。您现在可以轻松地解析这些数据并将每个名称/值添加到页面上下文中。请注意,您需要按照这些方式做一些事情,因为这些参数中的每一个在您的站点上都是可选的。

于 2010-04-28T06:44:30.253 回答
-1

您可以利用 C# 4.0 命名参数和可选参数。请看一下这个来自 hacked的例子

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

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

您可以将其声明为

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

高温高压

于 2010-04-27T13:00:45.203 回答