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?

Foi útil?

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 RedirectToActionmé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 = "" });
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top