为什么我的路由网址在不同的控制器中不匹配?

时间:2010-11-23 20:23:47

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

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

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

输出此网址:

/产品/信息/ 1330 /珊妮蓝色小迷彩短裤

映射到此路线:

    routes.MapRoute(

        "ViewProduct",

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

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

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

    );

在我的SiteMap控制器中,但我正在使用此代码生成网址:

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

它正在输出:

/产品/信息/ 1330?产品名=珊妮蓝色小迷彩短裤

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

劳埃德

1 个答案:

答案 0 :(得分:1)

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

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