Pregunta

Estoy usando ASP.NET MVC Preview 4 y me gustaría saber cómo usar el motor de enrutamiento para el envío de formularios.

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 formulario que se ve así:

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

que rinde a:

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

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

localhost/TestController.mvc/TestAction?paramName=value

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

localhost/TestController.mvc/TestAction/value

Las únicas soluciones que se me ocurren son crear una acción separada que solo verifique los parámetros de la solicitud o usar Javascript.

¿Fue útil?

Solución

Solución:

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

Otros consejos

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

TestController.mvc/TestAction

Como esa es la URL a la que desea que se dirija la solicitud.Su formulario luego se publicará en esa URL.Los valores del formulario publicados se asignan automáticamente a los parámetros de un método de acción, así que no se preocupe por no pasar esos datos a su método de acción.

Tengo entendido que así es como funciona HTML.Si haces un <form url="foo" method="get"> y publicar el formulario, entonces el formulario publicará foo?

param1=value1&...&paramn=valuen

No tiene nada que ver con MVC.

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

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