asp.net-mvc如何将字符串传递给我的控制器操作

发布时间: 2016/10/9 3:45:06
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

如何将下面的 url 映射...

domain.com/Products/product-name-here

我想要这映射到我 GetProduct 我产品控制器上的行动。

这里是我的 route.config 有什么

   public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

            routes.MapRoute(
                name: "Product",
                url: "product/{id}"
            );

            routes.MapRoute(
                name: "EditProduct",
                url:"Admin/Product/{action}",
                defaults: new { controller = "Products", action = "Index"}
            );

            routes.MapRoute(
                name:"ProductPages",
                url:"Products/{id}",
                defaults: new {controller = "Products", action = "GetProduct", id = UrlParameter.Optional }
            );

            routes.MapRoute(
                name:"OrderRoute",
                url:"Orders/",
                defaults: new { controller= "Order", action="Index"}
                );
        }

这里是我的行动,我想要映射到的路线。

[HttpGet]
        public ActionResult GetProduct(string pageURL)
        {

            if ( string.IsNullOrWhiteSpace(pageURL))            
                            return View("PageNotFound");


            var product = db.Products.Where(x => x.PageURL == pageURL);

            return View("GetProduct");

        }

解决方法 1:

添加︰

routes.MapRoute(
    name:"ProductPages",
    url:"Products/{pageURL}",
    defaults: new {controller = "Products", action = "GetProduct" }
);

重要︰ 默认路由应该是在你的 route.config 的最后一个路由。 在代码中它是第一个。

编辑︰ 您实际的路线"ProductPages"应删除或编辑,以避免冲突与我的建议。

官方微信
官方QQ群
31647020