2008-08-12 27 views
12

Estoy utilizando ASP.NET MVC Preview 4 y me gustaría saber cómo utilizar el motor de enrutamiento para envíos de formularios.Utilice el motor de enrutamiento para presentaciones de formularios en ASP.NET MVC Preview 4

Por ejemplo, tengo una ruta como esta:

routes.MapRoute(
      "TestController-TestAction", 
      "TestController.mvc/TestAction/{paramName}", 
      new { controller = "TestController", action = "TestAction", id = "TestTopic" } 
      ); 

y una declaración de la forma que se ve así:

<% using (Html.Form("TestController", "TestAction", FormMethod.Get)) 
    { %> 
    <input type="text" name="paramName" /> 
    <input type="submit" /> 
<% } %> 

que hace a:

<form method="get" action="/TestController.mvc/TestAction"> 
    <input type="text" name="paramName" /> 
    <input type="submit" /> 
</form> 

La resultante La URL de un envío de formulario es:

localhost/TestController.mvc/TestAction?paramName=value 

¿Hay alguna manera de tener esta ruta formulario de envío a la dirección URL deseada de:

localhost/TestController.mvc/TestAction/value 

Las únicas soluciones que se me ocurre son para crear una acción separada que simplemente comprueba los parámetros de la petición, o para usa Javascript

Respuesta

9

Solución:

public ActionResult TestAction(string paramName) 
{ 
    if (!String.IsNullOrEmpty(Request["paramName"])) 
    { 
     return RedirectToAction("TestAction", new { paramName = Request["paramName"]}); 
    } 
    /* ... */ 
} 
+1

Esto hace 2 solicitudes al servidor en lugar de una, ¿verdad? – Maslow

+0

@Maslow yup! una redirección 302 siempre estará allí – shashwat

3

En su ruta, deshágase de la parte {paramName} de la URL. Debería ser:

TestController.mvc/TestAction

ya que es la dirección URL que desea la solicitud de crear una ruta. Su formulario se publicará en esa URL. Los valores de formulario publicados se asignan automáticamente a los parámetros de un método de acción, por lo que no debe preocuparse de que esos datos no pasen a su método de acción.

3

Según tengo entendido, así es como funciona HTML. Si hace un <form url="foo" method="get"> y publica el formulario, ¿el formulario publicará foo?

param1=value1&...&paramn=valuen 

No tiene nada que ver con MVC.

Además, ¿qué parte de REST infringe esa URL? No es una bonita URL , pero por definición estricta de REST, puede ser RESTful. REST no especifica que los parámetros de consulta tengan que estar en un segmento de URL. Y en este caso, esos son parámetros de consulta.

+1

Sí tienes razón - gracias. Reflexionando sobre esto, ni siquiera estoy seguro de lo que estaba pensando, tal vez solo para conseguir que la aplicación MVC dirija a una nueva URL agradable después del envío del formulario. Los últimos atributos GET/POST ayudan a las cosas. –

Cuestiones relacionadas