Como chegar Html.BeginForm para chegar a corrigir MVC Route
-
07-07-2019 - |
Pergunta
Na minha aplicação ASP.NET MVC Eu tenho o seguinte campo de entrada GET:
<% using (Html.BeginForm("Search", "Products", FormMethod.Get) { %>
<input type="text" name="searchQuery" id="searchQuery" />
<% } %
Eu quero isso para ir para a rota:
routes.MapRoute("ProductSearchRoute",
"Products/Search/{searchQuery}/{pageNumber}",
new { controller = "Products", action = "Search", pageNumber = 1 });
O problema é que ele vai para / Produtos como string de consulta, por exemplo, Produtos? SearchQuery = Motoroil. Como faço para obtê-lo para usar o meu ProductSearchRoute e em vez disso formar / Produtos / Pesquisa / Motoroil?
Solução
Se eu entendi corretamente, você está tentando alterar dinamicamente a localização dos postos de formulário para, com base nas entradas da forma?
Você vai precisar usar javascript para isso, para alterar atributo target do formulário. O BeginForm () é para tornar o tag forma, que a partir de uma perspectiva html, é estático.
Outras dicas
Você pode tentar:
<% using (Html.BeginRouteForm("ProductSearchRoute", FormMethod.Get)) %>
Bondade,
Dan
public ActionResult SearchQuery (string searchQuery)
{
return RedirectToAction (searchQuery, "/Products/Search" );
}
public ActionResult Search (string searchQuery)
{
return View();
}
Como @ Daniel Elliott sugeriu, use BeginRouteForm. Para obter o seu URL para gerar corretamente, você tem que definir os routeValues ??com o mesmo nome definido na sua tabela rota.
@using (Html.BeginRouteForm("ProductSearchRoute", new { searchQuery= "my query", pageNumber = 1 })
{
}