没有MVC的ASP-Url路由存在问题

时间:2012-08-28 08:32:58

标签: asp.net url-routing

我遇到了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,但事情变得更糟。 我没有使用任何自定义处理程序

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

尝试在/之前使用<a href="/Categories/<%# Eval("Category_Id")%>/<%# Eval("Category_Name")%>">,但是resource not found/已添加routes.MapPageRoute("cats","/Categories/{ct}/{catname}","~/catwise.aspx"); / 但是它引发了编译时错误,说url无法跟踪~?或{{1}}。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

当您创建Categories/1/Apple之类的链接时,它会被视为当前网址的相对内容,您需要添加一个反斜杠作为网址的开头,例如/Categories/1/Apple,这可确保您的网址与根网址相关。

<强>更新

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

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

答案 2 :(得分:0)

试试这个例子:

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

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

相关问题