Pergunta

Estou usando o ASP.NET MVC Preview 4 e gostaria de saber como usar o mecanismo de roteamento para envios de formulários.

Por exemplo, tenho uma rota como esta:

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

E uma declaração de formulário parecida com esta:

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

que renderiza para:

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

O URL resultante do envio de um formulário é:

localhost/TestController.mvc/TestAction?paramName=value

Existe alguma maneira de ter essa rota de envio de formulário para o URL desejado de:

localhost/TestController.mvc/TestAction/value

As únicas soluções que consigo pensar são criar uma ação separada que apenas verifique os parâmetros da solicitação ou usar Javascript.

Foi útil?

Solução

Solução:

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

Outras dicas

Na sua rota, livre-se da parte {paramName} do URL.Deveria ser:

TestController.mvc/TestAction

Como esse é o URL para o qual você deseja que a solicitação seja encaminhada.Seu formulário será postado nesse URL.Os valores de formulário postados são mapeados automaticamente para parâmetros de um método de ação, portanto, não se preocupe em não ter esses dados passados ​​para seu método de ação.

Meu entendimento é que é assim que o HTML funciona.Se você fizer um <form url="foo" method="get"> e postar o formulário, então o formulário postará foo?

param1=value1&...&paramn=valuen

Não tem nada a ver com MVC.

Além disso, que parte do REST esse URL viola?Não é um bonito URL, mas pela definição estrita de REST, pode ser RESTful.REST não especifica que os parâmetros de consulta precisam estar em um segmento de URL.E neste caso, esses são parâmetros de consulta.

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