ASP.net中的URL路由路径问题

时间:2015-04-06 17:54:00

标签: asp.net routing

我对url路由有一个非常奇怪的问题。我为菜单栏定义了3条路线

routes.MapPageRoute("Article", "Article/{id}/{title}", "~/article.aspx");
routes.MapPageRoute("Contact", "Contact", "~/contact.aspx");            
routes.MapPageRoute("Category","Category/{id}/{name}","~/category.aspx");

当我点击联系我获得www.website.com/Contact然后我点击文章我得到www.website.com/Article/id/title并且所有链接都正常工作。

然而,当我首先点击文章然后点击联系人时,我有www.website.com/Article/id/title/contactwww.website/category/id/name/contact

仅在从参数路由到非参数路由的单击时才会出现此问题。如果你有任何想法,我会很高兴的。谢谢。

1 个答案:

答案 0 :(得分:1)

您的联系链接不是应用程序root相对的。你需要使应用程序根目录相对。 Web窗体中最简单的方法是切换到使用控件而不是普通的锚标签。

<asp:HyperLink runat="server" NavigateUrl="~/Contact" Text="Contact" />

否则,当您尝试导航到Contact而不使其成为应用程序根相对时,它会假定Contact低于当前URL中最后一个段的级别(因为URL曾经与目录相关联而不是比语义路由,例如:www.website.com/Article/id/title它认为title是目录。)

注意,您也可以使用类似于GetRouteUrl的方式在普通锚标记中执行一些内联​​C#,但我无法记住正确的函数调用。 ResolveUrlResolveClientUrl或类似内容。