asp.net 母版页、菜单链接、路由注册



我有一个带有菜单链接的母版页。每个菜单链接都是一个 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")) %>'

最新更新