2010-09-17 6 views
0

j'ai un itinéraire qui ressemble à ceci:routage sortant asp.net mvc d'un formulaire GET après

new { controller = "ControllerName", action = "PhotoGallery", slug = "photo-gallery", filtertype = UrlParameter.Optional, filtervalue = UrlParameter.Optional, sku = UrlParameter.Optional} 

et j'ai une forme qui ressemble à ceci:

<%using(Html.BeginForm("PhotoGallery", "ControllerName", FormMethod.Get)) {%> 
    <%:Html.Hidden("filtertype", "1")%> 
    <%:Html.DropDownList("filtervalue", ViewData["Designers"] as SelectList, "Photos by designer", new { onchange = "selectJump(this)" })%> 
    <%}%> 

En ce moment, quand le formulaire est soumis Je reçois les valeurs de formulaire ajoutées à l'URL en tant que chaînes de requête (? filtertype = 1 etc) Y at-il un moyen d'obtenir ce formulaire pour utiliser le routage pour afficher l'URL?

donc la forme posterais une URL qui ressemblait à ceci:

www.site.com/photo-gallery/1/selectedvalue 

et non comme »

www.site.com/photo-gallery?filtertype=1&filtervalue=selectedvalue 

Merci

Répondre

1

Si vous avez seulement quelques-uns des paramètres présents, Mvc créera une URL de type Query String à moins qu'elle ne trouve une URL de correspondance exacte

Sug gest vous aurez besoin quelque chose comme:

routes.Add("testRoute", 
new Route("/{action}/{controller}/{slug}/{filtertype}/{filtervalue}", 
new { controller = "ControllerName", action = "PhotoGallery", slug = "photo-gallery", filtertype = UrlParameter.Optional, filtervalue = UrlParameter.Optional} 
); 

assurez-vous que cela est avant votre route existante

+0

Merci pour la réponse! J'ai fini par utiliser le modèle PRG pour obtenir l'effet dont j'avais besoin. Mon routage est compliqué et ne permettrait pas une telle règle générale. – Paul