Question

Dans mon application ASP.NET MVC, j'ai le champ de saisie GET suivant:

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

Je veux que cela aille à la route:

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

Le problème est qu’il passe à / Products en tant que chaîne de requête, par exemple. Produits? SearchQuery = Motoroil. Comment puis-je le faire utiliser mon itinéraire ProductSearchRoute et à la place sous / Products / Search / Motoroil?

Était-ce utile?

La solution

Si je vous ai bien compris, vous essayez de modifier de manière dynamique l'emplacement dans lequel le formulaire est publié, en fonction des entrées du formulaire?

Vous devrez utiliser javascript pour cela, afin de modifier l'attribut cible du formulaire. BeginForm () sert à restituer la balise de formulaire qui, d’un point de vue HTML, est statique.

Autres conseils

Vous pouvez essayer:

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

gentillesse,

Dan

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

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

Comme @Daniel Elliott l'a suggéré, utilisez BeginRouteForm. Pour que votre URL soit correctement générée, vous devez définir les valeurs de routage avec le même nom que celui défini dans votre table de routage.

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

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top