ASP.Net MVC Redirecionar para uma visão diferente

89

É possível redirecionar para uma visualização diferente de um controlador?

Por exemplo, todos os meus controladores herdam de um controlador personalizado que tem um construtor que desejo redirecionar para uma visualização diferente se determinados critérios não forem atendidos. Espero que isso faça sentido.

Gavin
fonte

Respostas:

145

Você pode usar o RedirectToAction()método, então a ação para a qual você redireciona pode retornar uma Visualização. A maneira mais fácil de fazer isso é:

return RedirectToAction("Index", model);

Então, em seu método Index, retorne a visualização desejada.

John Sheehan
fonte
1
Se eu fizesse dessa forma, como retorno uma visão específica de uma ação do controlador.
Gavin
18
return View ("ViewName");
Craig Stuntz
11
@Craig - a View de retorno não redireciona e a URL acaba sendo a mesma de antes. Portanto, se você estiver em "/ edit / MyItem", ao retornar a visualização ("showitem") será exibida a visualização "showitem" com a url "/ edit /". Dependendo da sua situação, isso pode funcionar, mas nem sempre.
jeffreypriebe
5
@jeffrey, são duas etapas distintas: Redirecionar na primeira ação, como John disse, e retornar Visualizar na segunda. A primeira ação não pode (diretamente, de qualquer maneira) dizer à segunda qual visualização usar.
Craig Stuntz
@Craig isso ajuda um pouco. Existe uma "ação" e uma "visão" - duas coisas separadas. Por que, então, minha resposta abaixo funciona: RedirectToAction - nenhuma mudança de visão. Tenho certeza de que é .net MVC 101, mas não entendo. Obrigado.
jeffreypriebe
19
 if (true)
 {
   return View();
 }
 else
 {
   return View("another view name");
 }
Mahender Reddy
fonte
2
Isso usa a mesma ação do controlador. RedirectToAction chama uma ação diferente. Esta foi a solução mais fácil para mim.
RaoulRubin
6

A maneira mais simples é usar return View.

return View("ViewName");

Lembre-se, o nome físico do "ViewName" deve ser algo como ViewName.cshtml em seu projeto, se você estiver usando MVC C # / .NET.

Maeda
fonte
4

Não estou 100% certo de quais são as condições para isso, mas para mim o acima não funcionou diretamente, pensei que tenha chegado perto. Acho que foi porque eu precisava de "id" para minha visualização, pois no modelo era chamado de "ObjectID".

Eu tinha um modelo com várias informações. Eu só precisava do id.

Antes disso, criei um novo objeto System.Web.Routing.RouteValueDictionary e adicionei o id necessário.

(System.Web.Routing.)RouteValueDictionary RouteInfo = new RouteValueDictionary();
RouteInfo.Add("id", ObjectID);
return RedirectToAction("details", RouteInfo);

(Observação: o projeto MVC em questão eu não criei, então não sei onde estão todas as partes "complicadas" certas.)

jeffreypriebe
fonte
3

Aqui está o que você pode fazer:

return View("another view name", anotherviewmodel);
Andrew
fonte