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?

Foi útil?

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 })
{

}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top