【问题标题】:an asp.net routing issue一个asp.net路由问题
【发布时间】:2011-06-02 12:08:17
【问题描述】:

我在 Global.asax 上的路由实现

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

void intRoutes(RouteCollection Rts)
        {
            Rts.MapPageRoute("search", "{language}/{page}", "~/search.aspx");
            Rts.MapPageRoute("category", "{language}/{name}/{no}/{categoryname}", "~/category.aspx");
            Rts.MapPageRoute("product", "{language}/{name}/{no}/{productname}", "~/product.aspx");
        }

问题是;如果我在超链接上使用 product 路由,如下所示;

<asp:HyperLink ID="hyProduct" 
        NavigateUrl='<%#HttpUtility.UrlDecode(((Page)HttpContext.Current.Handler).GetRouteUrl("product", new{ language=getUIFromHelper(),name=getNameFromHelper(),no=Eval("code"),productname=getProductNameFromHelper(Eval("name"))})) %>' runat="server" Text="something" />

一切顺利,链接按预期编写

/en/products/06.008.001.150.0510/davis-fish-seeker-green

但是当我单击该链接时,category.aspx 页面运行的是 product.aspx。

我错过了什么吗?

【问题讨论】:

    标签: asp.net c#-4.0 url-rewriting url-routing


    【解决方案1】:

    是的,路由器怎么知道你想要哪一个?它们都有四个没有固定目录的占位符。无法判断是哪一个。

    您需要执行一些操作,例如添加一个固定目录,以便区分两者:

    Rts.MapPageRoute(..., "{language}/Category/{no}/{categoryname}", ...
    Rts.MapPageRoute(..., "{language}/Product/{no}/{productname}", ...
    

    【讨论】:

    • 是的,乔纳森,我注意到,两条路线都有相同的结构。我应该改变其中一个...感谢您的快速回复
    【解决方案2】:

    我添加了额外的虚拟文件夹,包括 /c//p/

    类别和产品路线
    void intRoutes(RouteCollection Rts)
            {
                Rts.MapPageRoute("search", "{language}/{page}", "~/search.aspx");
                Rts.MapPageRoute("category", "{language}/c/{name}/{no}/{categoryname}", "~/category.aspx");
                Rts.MapPageRoute("product", "{language}/p/{name}/{no}/{productname}", "~/product.aspx");
            }
    

    现在,路由器可以区分需要哪一个了..

    【讨论】:

      猜你喜欢
      • 2016-07-10
      • 2013-11-13
      • 2011-11-30
      • 2013-06-07
      • 1970-01-01
      相关资源
      最近更新 更多