2009-09-16 7 views
2

Dans mon application ASP.NET MVC je le champ de saisie GET suivante:Comment obtenir Html.BeginForm GET pour corriger MVC Route

<% using (Html.BeginForm("Search", "Products", FormMethod.Get) { %> 
    <input type="text" name="searchQuery" id="searchQuery" /> 
<% } % 

Je veux que cela aller à la route:

routes.MapRoute("ProductSearchRoute", 
    "Products/Search/{searchQuery}/{pageNumber}", 
new { controller = "Products", action = "Search", pageNumber = 1 }); 

Le problème est, il va à/produits comme chaîne de requête, par exemple Produits? SearchQuery = Motoroil. Comment puis-je l'utiliser pour utiliser mon ProductSearchRoute et former/Products/Search/Motoroil?

Répondre

3

Si je vous comprends bien, vous essayez de modifier dynamiquement l'emplacement du formulaire de messages, sur la base des entrées de la forme?

Pour cela, il vous faudra utiliser javascript, afin de modifier l'attribut cible du formulaire. Le BeginForm() est pour rendre la balise de formulaire, qui, d'un point de vue html, est statique. Comme le suggère @Daniel Elliott, utilisez BeginRouteForm.

1

Vous pouvez essayer:

<% using (Html.BeginRouteForm("ProductSearchRoute", FormMethod.Get)) %> 

Bonté,

Dan

+0

C'est 1/2 chemin. Il crée toujours la chaîne de requête "?": Http: // localhost: 8820/Products/Search /? SearchQuery = test – Alex

+1

Fondamentalement, comment puis-je comprendre que mon entrée "searchQuery" correspond à/Products/Search/{searchQuery } <- Mettez la valeur au lieu de {searchQuery} – Alex

+2

Je suis à peu près sûr qu'il n'y a aucun moyen de le faire. Les méthodes HTML Helper restituent une balise de formulaire au navigateur, mais rien ne modifie l'attribut cible du formulaire en fonction de l'entrée de l'utilisateur * après * le rendu du formulaire. Vous devrez utiliser javascript, je pense. – womp

0

Pour que votre URL soit correctement générée, vous devez définir les valeurs de route avec le même nom défini dans votre table de routage.

@using (Html.BeginRouteForm("ProductSearchRoute", new { searchQuery= "my query", pageNumber = 1 }) 
{ 

} 
1
public ActionResult SearchQuery (string searchQuery) 
{ 
    return RedirectToAction (searchQuery, "/Products/Search"); 
} 

public ActionResult Search (string searchQuery) 
{ 
    return View(); 
} 
Questions connexes