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?

Foi útil?

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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top