我有一个带有菜单链接的母版页。每个菜单链接都是一个 HTML 锚点,其中 HREF 属性设置为易于记忆/编写的 URL,例如"主页"。下面是一个示例:
<table style="width: 100%;">
<tr>
<td>
<ul class="menu">
<li><a href="main-page" class="parent">Main Page</a></li>
</ul>
</td>
</tr>
</table>
在我的 Global.asax 中,在 Application_Start 下,我使用 RouteCollection 对象注册路由,如下所示:
protected void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}
private void RegisterRoutes(RouteCollection routes)
{
routes.MapPageRoute("main-page", "main-page", "~/Default.aspx");
}
这工作正常。每当我单击主页菜单链接时,它都会将我重定向到默认.aspx。但我有一个问题。其中一个路由定义如下:
routes.MapPageRoute("news-detail", "news-detail/{newsId}", "~/NewsDetail.aspx");
这意味着它接受新闻 ID 作为参数,并使用相应的新闻 ID 重定向到 NewsDetails.aspx 页面。此时,导航栏如下所示:
http://localhost/MyApp/news-detail/21
这里的"21"代表我正在显示的新闻的 ID。因此,如果我单击"主页"菜单链接进入主页,它会尝试将我带到此位置:
http://localhost/MyApp/news-detail/main-page
这是一个无效的网址。
如何定义我的菜单链接,以便即使我在嵌套页面中,它们也会始终将我带到正确的页面(在本例中,我在"/news-detail/21"下)?我希望我能清楚地解释自己。
好的,我认为您的问题是href
属性。
尝试使用以下方法进行更改:
<a href="~/main-page" class="parent">Main Page</a>
如果这不起作用,请尝试更改 ASP.NET 超链接的 HTML 锚点:
<asp:HyperLink ID="hlMain" runat="server" NavigateUrl="~/main-page" CssClass="parent" Text="MainPage" />
来源: MSDN
更新
然后,将代码更改为:
PostBackUrl='<%# String.Format("~/news-detail/{0}", Eval("Id")) %>'