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.

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.


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");
 }

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.


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.)


3

Aqui está o que você pode fazer:

return View("another view name", anotherviewmodel);
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.