我对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/contact
或www.website/category/id/name/contact
仅在从参数路由到非参数路由的单击时才会出现此问题。如果你有任何想法,我会很高兴的。谢谢。
答案 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#,但我无法记住正确的函数调用。 ResolveUrl
或ResolveClientUrl
或类似内容。