我从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
但除了页面,我还可以有过滤器,年龄范围,性别等。
答案 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