2013-08-20 46 views
0

我从MySQL表中有以下示例数据。从MySQL数据库MV4路由动态路由

Sample data

我的问题是在我的MVC 4项目,我怎么能得到路由工作,这样,如果一个用户进入www.mydomain.com/products/apples/我想调用实际上是URL www.mydomain.com/products/index/1的观点,我如何实现这一目标?

回答

0

您可以创建这样一个路径:

routes.MapRoute("Product", "products/{productName}", 
    new {controller = "products", action="index"}); 

这条路线是说:

当一个请求与匹配模式的网址进来:“产品/ {产品名称}”(例如: http://www.example.com/products/apple),将其传递给“ProductsController”中的“index”操作,以处理并将{productName}占位符所指示的URL段作为名为“productName”的参数传递给该操作。

那么你的行动将是:

[HttpGet] 
public ActionResult Index(string productName) { 
    // Lookup product from DB 

    // do stuff 
    var viewModel = ...; 
    return View(viewModel); 
} 

所以,当收到请求时对产品/苹果,“苹果”被传递到Index操作作为产品名称的参数。

+0

您是否可以扩大答案的范围,因为我是MVC的新手,并努力实现这一目标。 – Tommassiov

0

在默认路由表达式之前输入以下代码RouteConfig.cs

foreach (var item in _context.products) 
{ 
    routes.MapRoute(
     item.Url, 
     "products/" + item.Url, 
     new { controller = "products", action = "index", @id = item.ProductId } 
    ); 
} 

以上_context.products用于从数据库中检索产品。您可以根据您的模型进行修改。

+0

RouteConfig.cs中的代码何时执行?应用程序(IIS)何时启动或何时请求URL?此外,这个应用程序将有10万个产品的区域,所以会有这样的性能问题。 – Tommassiov

+0

此代码将在应用程序启动时运行。所以如果你有这么多的记录,它会在第一时间运行缓慢,但之后不需要时间。如果你不想要这个,你可以使用路由约束。 –

+0

处理这么多URL的推荐方式是什么?另外,如果在应用程序(IIS)启动后添加或更改URL,那又如何呢? – Tommassiov