2016-08-22 74 views
0

我怎么能映射以下网址...如何将字符串传递给我的控制器行动

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”应该被删除或编辑,以避免与我的建议冲突。

+0

这为我工作。谢谢! – ddeamaral

0

此代码实际上并不调用一个动作:

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

你想添加使用的行为,像这样的路径(注意动作标签):

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