Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 没有MVC问题的ASP Url路由_Asp.net_Url Routing - Fatal编程技术网

Asp.net 没有MVC问题的ASP Url路由

Asp.net 没有MVC问题的ASP Url路由,asp.net,url-routing,Asp.net,Url Routing,我在asp 4.0路由方面遇到问题 我在Global.cs中有方法 void RegisterRoutes(RouteCollection routes) { routes.MapPageRoute("cats","Categories/{ct}/{catname}","~/catwise.aspx"); } 及 在我的主页上 <a href="Categories/<%# Eval("Category_Id")%>/<%# Eval("Categor

我在asp 4.0路由方面遇到问题

我在Global.cs中有方法

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

在我的主页上

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

这在像
Categories/1/Apple
这样的第一次路由中非常有效,但现在在第一次路由之后,所有链接都是双向路由的,比如
Categories/1/Apple/Categories/2/Banana

链接相互攀爬,因此页面显示
未找到资源
我试着设置
Base
,但这让事情变得更糟。 我没有使用任何自定义处理程序

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

尝试在url之前使用
/
,比如
,但它说
资源找不到
,所以在
routes.MapPageRoute(“cats”,“Categories/{ct}/{catname}”,“~/catwise.aspx”)中添加了
/


但它抛出了编译时错误,表示url不能包含
/
~

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

<a href="/Categories/<%# Eval("Category_Id")%>/<%# Eval("Category_Name")%>">
在数据绑定场景中,您可以尝试:

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

当您创建诸如
类别/1/Apple
之类的链接时,它被视为与当前URL相对的链接,您需要在URL的开头添加反斜杠,例如
/Categories/1/Apple
,这确保您的URL相对于根

更新


根据您的评论,“主页url是
http://localhost:14268/mysite
“您的站点似乎在虚拟目录下运行。因此,简单地将
/
添加到URL将不起作用,您需要明确地将VD的路径预先添加到URL,例如

<% Request.ApplicationPath %>/Categories/...
/Categories/。。。
试试这个例子:

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


应该解析为指向应用程序根的相对路径…

好的,我试过了,但没有成功。它说
资源找不到
,所以我甚至在MapPageRoutes方法中添加了一个
/
,比如
routes.MapPageRoute(“cats”),“/Categories/{ct}/{catname},“~/catwise.aspx”)
但这会引发编译时错误,它说
url不能以~或/
@VishalRavlani开头,您不需要更改路径,这就是你生成url的方式。@詹姆斯:你能告诉我该怎么做吗..因为我已经搜索url重写和url路由三天了,但没有找到合适的资源,所以我决定使用url路由。这似乎很容易。但我没有在任何一篇文章中找到解决办法。这是我正在开发的第一个网站,我对路由一无所知。我相信那里有很多资源。请参阅我提到的链接。我还编辑了我的文章,最后我给出的例子应该可以正常工作。@lalibi:k我试过了。。但在我的例子中,你们可以看到apple(类别名称)和1(类别id)都来自数据库。所以,当我使用数据库中的值执行此操作时,它不起作用,错误为“请求不正确,因为数据未被评估”。当您测试站点时,主页URL是什么?是不是有点像
http://localhost:1234
http://localhost:1234/mysite
。如果是前者,
/
工作主页url应该是
http://localhost:14268/mysite
这就是
/
不起作用的原因。它给出
http://localhost:14268/Categories/1/Apple
而不是正确的
http://localhost:14268/mysite/Categories/1/Apple
。有趣的是,在制作过程中,它会起作用。。。无论如何,请看我在下面帖子中的最后一次编辑,它应该会起作用。当我添加
/
时,我不知道为什么,但它给出了一个错误,
资源未找到
谢谢你
起了作用。但是我不得不接受OP的答案,因为他首先回答了这个解决方案……但是非常感谢你much@VishalRavlani没问题,如果你提到这个网站是在虚拟磁盘下运行的,我会第一次回答:)很抱歉,我不能接受这个答案,因为你的解决方案在本地运行,但在主机服务器上不工作…所以我不得不使用
GetRouteUrl
。有趣的是。。。但是如果它不起作用,你当然不应该接受。问题是我在
本地测试它,它工作得很好,所以我接受了你的答案,我想如果它在本地工作,它也可以在托管服务器上运行。但是当上传到托管服务器上时,它不工作了。所以我不得不使用其他解决方案。很抱歉误解了。
<% Request.ApplicationPath %>/Categories/...
<a href="<%=Request.ApplicationPath%>/Categories/<%# Eval("Category_Id")%>/<%# Eval("Category_Name")%>">