Usando o ASP.NET MVC, existem situações (como envio de formulário) que podem exigir a RedirectToAction
.
Uma dessas situações é quando você encontra erros de validação após o envio de um formulário e precisa redirecionar de volta para o formulário, mas deseja que o URL reflita o URL do formulário, não a página de ação que ele envia.
Como eu exijo que o formulário contenha os POST
dados originalmente editados, para conveniência do usuário e para fins de validação, como posso passar os dados através do RedirectToAction()
? Se eu usar o parâmetro viewData, meus POST
parâmetros serão alterados para GET
parâmetros.
c#
asp.net-mvc
Matt Mitchell
fonte
fonte
Respostas:
A solução é usar a propriedade TempData para armazenar os componentes de solicitação desejados.
Por exemplo:
Em sua ação "Formulário", você pode:
fonte
Lembre-se de que TempData armazena a coleção de formulários na sessão. Se você não gostar desse comportamento, poderá implementar a nova interface ITempDataProvider e usar algum outro mecanismo para armazenar dados temporários. Eu não faria isso, a menos que você saiba de fato (via medição e criação de perfil) que o uso do estado Session está prejudicando você.
fonte
Dê uma olhada no MVCContrib , você pode fazer isso:
fonte
Existe outra maneira que evita tempdata. O padrão que eu gosto envolve a criação de 1 ação para a renderização original e a renderização novamente do formulário inválido. É algo como isto:
Esse é o padrão mais ou menos. Um pouco de pseudoy. Com isso, você pode criar 1 visualização para manipular a renderização do formulário, exibindo novamente os valores (já que o formulário será preenchido com valores anteriores) e mostrando mensagens de erro.
Quando o lançamento nesta ação, se for válido, ele transfere o controle para outra ação.
Estou tentando facilitar esse padrão na estrutura de validação .net à medida que desenvolvemos o suporte ao MVC.
fonte
Se você deseja passar dados para a ação redirecionada, o método que você pode usar é:
fonte
TempData é a solução que mantém os dados de ação em ação.
fonte