Pregunta

En mi aplicación ASP.NET MVC tengo el siguiente campo de entrada GET:

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

Quiero que esto vaya a la ruta:

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

El problema es que va a / Productos como cadena de consulta, p. Productos? SearchQuery = Motoroil. ¿Cómo consigo que use mi ProductSearchRoute y, en su lugar, forme / Productos / Buscar / Motoroil?

¿Fue útil?

Solución

Si lo entiendo correctamente, ¿está tratando de alterar dinámicamente la ubicación en la que se publica el formulario, según las entradas del formulario?

Necesitará usar javascript para esto, para alterar el atributo de destino del formulario. BeginForm () es para representar la etiqueta del formulario, que desde una perspectiva html, es estática.

Otros consejos

Puedes probar:

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

Bondad,

Dan

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

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

Como sugirió @Daniel Elliott, use BeginRouteForm. Para que su URL se genere correctamente, debe establecer los valores de ruta con el mismo nombre definido en su tabla de rutas.

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

}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top