2010-05-03 20 views
5
configuración

que una ruta de búsqueda:ASP.NET MVC ruta de búsqueda

routes.MapRoute(
"Search", 
"Search/{q}", 
new { controller = "Search", action = "Index" } 
); 

El formulario de búsqueda tiene un cuadro de entrada y un botón. Quiero la búsqueda con un GET como a continuación.

<% using(Html.BeginForm("Index", "Search", FormMethod.Get)) 
{%> 
    <%:Html.TextBox("q")%> 
     <span class="query-button"> 
     <input type="submit" value="select" /></span> 
    <% } %> 
</div> 

La acción en el SearchController es:

public ActionResult Index(string q) 
{ 
    // search logic here 

    return View(new SearchResult(q)); 
} 

El URL es la siguiente: http://localhost:19502/search?q=mvc+is+great

, pero quiero que la búsqueda sea como: http://localhost:19502/search/mvc+is+great

Cómo hacer Configuro la ruta o el Html.BeginForm

+0

ver http://www.w3.org/TR/html401/interact/forms.html#h-17.13.1 –

Respuesta

5

No hay una manera directa de hacerlo con solo un formulario. La función prevista de un formulario es transmitir pares de nombre/valor; el uso de MVC no cambia eso.

Así que sus opciones son:

  • reemplazar la funcionalidad del formulario utilizando Javascript manejando el caso de la forma de presentar, redirigir a la URL deseada y devolver false para evitar que la forma de la realidad presentando
  • No use un formulario y maneje el evento click de un botón para hacer el redireccionamiento.

Su ruta ya está configurada correctamente para manejar esto.

+0

Daniel ha puesto esto bastante bien: no puede forzar el formulario para hacer una solicitud de obtención y alterar la URL por usted. – mare

+0

Implementé el evento de clic js para redirigir. Usé el http://www.digitalbart.com/jquery-and-urlencode/ que es muy bueno. – harropriiz

0

O puede presentar FormMethod.Post y en su controlador RedirectToActionResult retorno

+0

Esto requiere un viaje de ida y vuelta adicional entre el servidor y el cliente por el bien de formatear una url. No recomendado. –

+0

Sí, es una llamada adicional, pero usar js tampoco es una buena forma. Y también se recomienda no dejar al usuario en la misma página donde se realizaron algunos cambios en los datos (eliminar, editar, agregar) por lo que presionando f5 se le pedirá que envíe datos una vez más. Y eche un vistazo - http://stackoverflow.com/questions/1936/how-to-redirecttoaction-in-asp-net-mvc-without-losing-request-data - las personas lo están usando. –

Cuestiones relacionadas