【问题标题】:Why are my routing urls not matching in different controllers?为什么我的路由 url 在不同的控制器中不匹配?
【发布时间】:2010-11-24 04:30:32
【问题描述】:

我刚刚创建了一个站点地图控制器,它为我的站点生成站点地图。我正在尝试输出我在整个网站上列出的产品的 url。例如,在我的产品列表视图中,我有以下代码:

Url.Action("Details", "Products", new { id = item.Id, productName = Url.ToFriendlyUrl(item.Brand + " " + item.Colour + " " + item.Size + " " + item.Title) })

输出此网址:

/products/details/1330/sandee-blue-small-camo-shorts

映射到这条路线:

    routes.MapRoute(

        "ViewProduct",

        "products/{cat}/{id}/{productName}",

        new { controller = "products", action = "Details", cat = "", id = "", productName = "" },

        new string[] { "EliteFightKit.Web.Controllers" }

    );

在我的 SiteMap 控制器中,我使用此代码生成 url:

Url.Action("Details", "Products", new { id = item.Id, productName = Url.ToFriendlyUrl(item.Brand + " " + item.Colour + " " + item.Size + " " + item.Title) })

它正在输出这个:

/products/details/1330?productname=sandee-blue-small-camo-shorts

我哪里出错了,如何让 SiteMap url 与我的产品列表视图中创建的 url 相关联?

劳埃德

【问题讨论】:

    标签: asp.net-mvc routing asp.net-mvc-routing


    【解决方案1】:

    您的路线无效。可选参数只能出现在末尾。在您的情况下,您有 cat 路由参数,它是选项,位于 URL 的中间。因此,如果您希望选择此路由而不是默认路由,则需要为此参数提供一个值:

    Url.Action("Details", "Products", 
        new { id = "123", productName = "foo", cat = "bar" })
    

    【讨论】:

    • 好收获!谢谢,完全错过了那个,昨晚看了大约一个小时,另一个暂时看不到树林。感谢您的宝贵时间,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 2016-05-26
    • 2021-08-21
    • 2017-10-15
    相关资源
    最近更新 更多