Come ottenere Html.BeginForm per ottenere per correggere il percorso MVC
-
07-07-2019 - |
Domanda
Nella mia applicazione ASP.NET MVC ho il seguente campo di input GET:
<% using (Html.BeginForm("Search", "Products", FormMethod.Get) { %>
<input type="text" name="searchQuery" id="searchQuery" />
<% } %
Voglio che questo vada sul percorso:
routes.MapRoute("ProductSearchRoute",
"Products/Search/{searchQuery}/{pageNumber}",
new { controller = "Products", action = "Search", pageNumber = 1 });
Il problema è che va a / Products come stringa di query, ad es. Prodotti? SearchQuery = Motoroil. Come ottengo che usi la mia ProductSearchRoute e invece form / Products / Search / Motoroil?
Soluzione
Se ti capisco correttamente, stai provando a modificare dinamicamente la posizione in cui il modulo pubblica, in base agli input del modulo?
Dovrai usare javascript per questo, per modificare l'attributo target del modulo. BeginForm () serve per il rendering del tag form, che da una prospettiva html, è statico.
Altri suggerimenti
Potresti provare:
<% using (Html.BeginRouteForm("ProductSearchRoute", FormMethod.Get)) %>
La gentilezza,
Dan
public ActionResult SearchQuery (string searchQuery)
{
return RedirectToAction (searchQuery, "/Products/Search" );
}
public ActionResult Search (string searchQuery)
{
return View();
}
Come suggerito da @Daniel Elliott, utilizzare BeginRouteForm. Per ottenere la corretta generazione dell'URL, devi impostare i valori di percorso con lo stesso nome definito nella tabella del percorso.
@using (Html.BeginRouteForm("ProductSearchRoute", new { searchQuery= "my query", pageNumber = 1 })
{
}