2012-05-11 136 views
1

我有一个控制器,需要3个paramteres传递多个参数MVC3

public ActionResult Directives(string MachineName, int ProjectId, int CompanyId) 

眼下网址看起来是这样的。

/Project/Directives?projectId=41&MachineName=Apple%20Macbook%20Luft 

但是我如何得到它看起来像这样。

/Project/Directives/41/AppleMacbookAir/ 
+2

这quiestion可以帮助你? http://stackoverflow.com/questions/217960/how-can-i-create-a-friendly-url-in-asp-net-mvc –

+0

如果你有一个处理注册模式的路由,你的URL将会改变。 –

回答

2

尝试定制路线:

routes.MapRoute(
    "Project",            // Route name 
    "{Controller}/{Action}/{projectId}/{machineName}/{companyId}",       
    new { controller = "Project", action = "Directives", projectId = 0, machineName = "", companyId = 0 } // Parameter defaults 
); 

http://www.asp.net/mvc/tutorials/controllers-and-routing/creating-custom-routes-cs

+0

它完美的工作。但我不能得到结果RedirectToAction(“指令”,“项目”,新{机器名= project.MachineName,ProjectId = projectId,CompanyId = user.Company_Id});'给我正确的价值?它仍然是/ Dire .../Project = 23&CompanyId = 27 .... – mortenstarck

+0

尝试'返回RedirectToAction(“Directives”,“Project”,new {projectId = projectId,machineName = project.MachineName,CompanyId = user.Company_Id} );'你需要按照正确的顺序使用参数? –

+0

刚刚尝试过。还是一样。 – mortenstarck

1

您可以通过ID作为RedirectToAction()方法的routeValues参数的一部分。

return RedirectToAction("Action", new { id = 99 }); 

这将导致一个重定向到Site/Controller/Action/99.

编辑: 有关自定义URL,你必须创建custom route为:

routes.MapRoute( "Project", // Route name 
        "{controller}/{Action}/{ProjectId}/{MachineName}/{CompanyId}", 
        new { controller = "Project", 
         action = "Directives", 
         ProjectId= 0, 
         MachineName= "", 
         CompanyId = 0 
         } // Parameter defaults); 

使用UrlParameter.Optional,如果你想要的任何参数可选。 上ASP.NET MVC Routing

遵循斯蒂芬Walthe文章转寄此:RedirectToAction with parameter