RedirectToAction redireciona com parâmetros de consulta?
-
28-10-2019 - |
Pergunta
Estou trabalhando em um aplicativo ASP.NET MVC e encontrei uma coisa estranha.
Eu tenho duas ações de controlador como esta:
[CustomAuthorize(Roles = SiteRoles.Admin)]
public ActionResult Review(int? id)
[CustomAuthorize(Roles = SiteRoles.Admin)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Review(AdReview data)
Primeiro, chamo a ação Review
com null como parâmetro, isso exibirá uma página da web com uma lista de itens.Os itens estão vinculados à primeira ação Review com o conjunto de id.
Quando o id for fornecido para a ação de revisão, uma página de edição da web será retornada para este item.Ao clicar em enviar após algumas alterações, iremos parar na segunda ação de revisão (postagem).Aqui, o item será salvo.
Tudo bem até agora.
Agora, na última ação Review (post), obtive o seguinte código no final:
return RedirectToAction("Review", "Ad");
Isso acionará a primeira ação de revisão novamente. O problema é que ela fornecerá o id anterior?Pensei que RedirectToAction não fornecerá nenhum parâmetro?
Solução
Achei que RedirectToAction não fornecerá nenhum parâmetro?
Seu entendimento está errado.Os parâmetros presentes no modelstate são encaminhados automaticamente se o URL de destino contiver um parâmetro de rota com o mesmo nome.Neste caso, você tem um parâmetro id
que está sendo postado (provavelmente como parte de um campo de entrada ou parte do url) e quando você redireciona de volta para a ação Index original, porque suas definições de rota têm um token id
no final do RedirectToAction
método irá preenchê-lo.
Como alternativa para evitar esse comportamento, você pode especificar explicitamente que o parâmetro id
não deve ser enviado ao redirecionar:
return RedirectToAction("Index", "Ad", new { id = "" });