2012-05-11 3 views
1

J'ai un contrôleur qui prend 3 paramterespassant paramètre multiple dans MVC3

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

En ce moment, l'URL ressemble à ceci.

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

Mais comment puis-je l'obtenir pour ressembler à ceci.

/Project/Directives/41/AppleMacbookAir/ 
+2

Ce quiestion pourrait vous aider? http://stackoverflow.com/questions/217960/how-can-i-create-a-friendly-url-in-asp-net-mvc –

+0

Si vous avez un itinéraire qui gère le modèle enregistré, vos URL changeront . –

Répondre

2

Essayez un itinéraire personnalisé:

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

Cela fonctionne parfaitement. Mais je ne peux pas obtenir le'retour RedirectToAction ("Directives", "Project", nouveau {MachineName = projet.MachineName, ProjectId = projetId, CompanyId = user.Company_Id}); 'Pour me donner la bonne valeur? C'est toujours le/Dire .../Project = 23 & CompanyId = 27 .... – mortenstarck

+0

Essayez 'return RedirectToAction (" Directives "," Projet ", nouveau {projectId = projectId, nom_machine = project.MachineName, CompanyId = user.Company_Id}) «Vous devez avoir les params dans le bon ordre, peut-être? –

+0

Je viens d'essayer. Toujours le même. – mortenstarck

1

Vous pouvez transmettre l'ID dans le cadre du paramètre routeValues ​​de la méthode RedirectToAction().

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

Cela entraînera une redirection vers Site/Controller/Action/99.

Edit: Pour personnaliser url, vous devez créer custom route comme:

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

Utilisez UrlParameter.Optional si vous voulez un paramètre optionnel. Suivez Par Stephen Walthe article sur ASP.NET MVC Routing

Reportez-vous ceci: RedirectToAction with parameter