0

我正在尝试Route在 MVC3 中创建一个新的来实现链接http://localhost/Product/1/abcxyz

routes.MapRoute(
                "ProductIndex", // Route name
                "{controller}/{id}/{name}", // URL with parameters
                new { controller = "Product", action = "Index", id = UrlParameter.Optional, name = UrlParameter.Optional } // Parameter defaults
            );

Route Link是这样使用的:

<li>@Html.RouteLink("My Link", "ProductIndex", new { controller = "Product", id = 10, name = "abcxyz" })</li>

产品索引操作:

public ViewResult Index(int id, string name)
        {
            var product = db.Product.Include(t => t.SubCategory).Where(s => s.SubID == id);
            return View(product.ToList());
        }

网址按我的预期呈现。但是当我点击它时,我收到一条 404 错误消息

HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly

更新

我把它Route放在上面Default Route并且 URL 工作正常。但是出现了问题。我的索引页面http://locahost直接指向控制器的Index动作Product,但我希望它指向控制器的Index动作Home

4

2 回答 2

1

尝试一下

routes.MapRoute(
                "Default", // Route name
                "{controller}/{id}/{name}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional, name = UrlParameter.Optional } // Parameter defaults
            );

有关路由详细信息,请参阅此链接。在此链接中讨论了每种类型的路由。

http://www.codeproject.com/Articles/408227/Routing-in-MVC3

于 2013-05-30T09:09:33.347 回答
1

这是因为您的路线中有 2 个可选参数,并且引擎无法确定将值设置为哪一个。在此处查看我对类似问题的回答

您可以先为您的产品控制器创建一个特定的路由(使用强制 id),然后再使用通用的后备路由。

routes.MapRoute(
            "ProductIndex", // Route name
            "products/{id}/{name}", // URL with parameters
            new { controller = "Product", action = "Index", name = UrlParameter.Optional } // Parameter defaults
        );
于 2013-05-30T09:13:51.570 回答