formulário ASP.NET MVC que redireciona para uma rota
-
06-07-2019 - |
Pergunta
Olá é possível ter uma forma ASP.NET MVC que utiliza as rotas definidas no Global.asax para deixar os seus valores (através de uma solicitação GET)? Tenho a forma definida assim:
<% using (Html.BeginForm("CanviaOpcions","Sat",FormMethod.Get))
{ %>
<fieldset>
<legend>Opciones</legend>
<%= Html.DropDownList("nomSat")%>
<input type="submit" />
</fieldset>
<% } %>
e a seguinte rota no meu global:
routes.MapRoute(
"Canvia Opcions",
"Sat/{nomSat}",
new { controller = "Sat", action = "CanviaOpcions" }
);
Eu quero que depois de um submeter o formulário com nomSat tendo o valor XXX ter o seguinte URL no navegador: http: // machinename / sat / XXX
É possível?
Solução
Você realmente se preocupam com a URL que você navegar para, ou você só se preocupam com o que o próximo URL que o usuário vê é?
Se você só se preocupam com a URL que o usuário vê, então você não precisa usar o método que você está tentando.
O que você poderia fazer é ter uma ação post que lê no parâmetro "nomsat", em seguida, redirecionar para outra ação que tem a URL que você está querendo.
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(string nomsat)
{
...
return RedirectToAction("Detail", new RouteValueDictionary {{"nomsat", nomsat}});
}
public ActionResult Detail(string nomsat)
{
...
return View();
}
Outras dicas
Não, você não pode adicionar aos parâmetros de roteamento através de um formulário HTML.
Você pode simular o comportamento com uma função Javascript embora. Como esta:
<fieldset>
<legend>Opciones</legend>
<%= Html.DropDownList("nomSat")%>
<input type="button"
onclick="window.location=('/<%=Url.Action("CanviaOpcions", "Sat") %>/' +
$('#nomSat').val())" />
</fieldset>