2012-08-28 73 views
0

我遇到了asp 4.0路由问题。没有MVC的ASP-Url路由问题

我有方法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,然后像<a href="/Categories/<%# Eval("Category_Id")%>/<%# Eval("Category_Name")%>">尝试,但它说resource not foundroutes.MapPageRoute("cats","/Categories/{ct}/{catname}","~/catwise.aspx");
所以添加/但它扔编译时错误说法网址不能孔坦/~?

+0

什么是主页URL时,要测试的网站?它是像'http:// localhost:1234'还是'http:// localhost:1234/mysite'。如果它的前者'/'应该可以工作 – lalibi

+0

主页的url是'http:// localhost:14268/mysite' –

+0

这就是'/'不起作用的原因。它提供了'http:// localhost:14268/Categories/1/Apple',而不是正确的'http:// localhost:14268/mysite/Categories/1/Apple'。有趣的是,在制作过程中会发挥作用......无论如何,在我的帖子下面看到我最后一次编辑,它应该做到这一点。 – lalibi

回答

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> 

See also here

+0

好吧我试过这个,但没有work.it说'资源没有找到',所以我添加了一个'/',即使在像routes.MapPageRoute(“cats”,“/ Categories/{ct}/{catname}”这样的MapPageRoutes方法中, “〜/ catwise.aspx”);'但是这会引发编译时错误,它说'url无法以〜或/'开头。 –

+0

@VishalRavlani你不需要改变你的路线,这只是你生成你的网址的方式。 – James

+0

@james:你能告诉我应该怎么做。因为我一直在寻找3天的URL重写和网址路由,但没有找到任何合适的资源,所以我决定使用网址路由。这似乎很容易。但在没有文章中我找到了解决方案。这是我开发的第一个网站,对路由没有任何了解。 –

0

当您创建链接如Categories/1/Apple它被视为与当前URL相对,您需要添加一个反斜杠作为URL的开头/Categories/1/Apple,这可确保您的URL与root相关。

更新

基于您的评论“主页网址是http://localhost:14268/mysite”它会出现在您的网站的虚拟目录下运行。因此,简单地将/添加到网址将不起作用,您需要明确地将您的VD的路径添加到网址,例如

<% Request.ApplicationPath %>/Categories/... 
+0

whenevr我添加'/'我不知道为什么但它给出的错误,“资源未找到” –

+0

@VishalRavlani看到更新的答案。 – James

+0

谢谢'<%Request.ApplicationPath%>'做了诀窍..但我不得不接受OP的答案,因为他先回答了这个解决方案....但非常感谢你 –

0

试试这个例子:

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

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

+0

Thanx ..它没有窍门 –

+0

很遗憾地说,我不得不接受这个答案,因为你的解决方案确实在本地工作,但didn' t在托管服务器上工作...所以我不得不使用'GetRouteUrl' .. –

+0

有趣...但当然,如果它不工作,你不应该接受它。 – user1429080