0

我在使用 asp 4.0 路由时遇到问题。

我在 Global.cs 中有方法

void RegisterRoutes(RouteCollection routes)
{  
    routes.MapPageRoute("cats","Categories/{ct}/{catname}","~/catwise.aspx");  
} 

protected void Application_Start(object sender, EventArgs e)
{  
    RegisterRoutes(RouteTable.Routes);  
}

在我的母版页上

<a href="Categories/<%# Eval("Category_Id")%>/<%# Eval("Category_Name")%>"> 

这在第一次路由中运行良好,Categories/1/Apple但现在在第一次路由之后,所有链接都是双重路由页面Categories/1/Apple/Categories/2/Banana

链接相互攀爬,所以页面显示Resource not found 我尝试设置Base,但它使事情变得更糟。我没有使用任何自定义处理程序

我应该如何解决这个问题?/为什么它不能正常工作?

尝试/在 url like 之前 使用,<a href="/Categories/<%# Eval("Category_Id")%>/<%# Eval("Category_Name")%>"> 但它说resource not found是这样添加/的, routes.MapPageRoute("cats","/Categories/{ct}/{catname}","~/catwise.aspx");
但它抛出编译时错误,说 url cannot contan /or ~or ?

4

3 回答 3

0

这不是路由问题。问题出在链接上。我不知道这是否是在网页中生成链接的更好方法,但快速解决方法是简单地添加一个/

<a href="/Categories/<%# Eval("Category_Id")%>/<%# Eval("Category_Name")%>">

编辑:

当您在主页中http://mysite/并且浏览器看到一个“相对”链接时,Categories/1/Apple它会将其添加到当前路径,因此结果是http://mysite/Categories/1/Apple. 因为您的链接是相对于页面的,所以下次您点击该链接时,浏览器会再次添加该链接,您将拥有http://mysite/Categories/1/Apple/Categories/1/Apple. 我提出的快速解决方法是通过添加前导将您的相对链接更改为绝对链接/

整个问题与 asp.net 及其路由无关。它关于浏览器如何处理相对链接。我认为有更合适的方法来生成链接(使用路由时),比如:

<asp:HyperLink ID="HyperLink1" runat="server" 
    NavigateUrl="<%$RouteUrl:ct=1,catname=Apples,routename=cats%>">
    Link Text
</asp:HyperLink>

在数据绑定场景中,您可以尝试:

<asp:HyperLink ID="HyperLinkClient" runat="server"  
    NavigateUrl='<%# GetRouteUrl("cats", new {ct = Eval("Category_Id"), catname = Eval("Category_Name")}) %>'> 
     Link Text 
</asp:HyperLink>

另请参阅此处

于 2012-08-28T08:41:54.053 回答
0

当您创建的链接Categories/1/Apple被视为相对于当前 URL 的链接时,您需要添加一个反斜杠作为 URL 的开头,例如/Categories/1/Apple,这可以确保您的 URL 是相对于根的。

更新

根据您的评论“主页网址是http://localhost:14268/mysite”,您的网站似乎正在虚拟目录下运行。因此,简单地添加/到 URL 是行不通的,您需要明确地将 VD 的路径添加到 URL 中,例如

<% Request.ApplicationPath %>/Categories/...
于 2012-08-28T08:49:02.190 回答
0

试试这个例子:

<a href="<%=Request.ApplicationPath%>/Categories/<%# Eval("Category_Id")%>/<%# Eval("Category_Name")%>">

<%=Request.ApplicationPath%>应该解析为指向应用程序根目录的相对路径...

于 2012-08-28T10:14:19.290 回答