Blz galera

Uma forma simples de se exibir mensagens ao usuário no ASP.NET MVC é usar a coleção TempData.

Assemelha-se à conhecida Session, porém seu valor dura somente até a próxima requisição HTTP da qual você leia novamente seu valor. Traduzindo, leu TempData de novo, seu valor se perdeu.

Vamos ver como fica na prática:

1) Crie um controller como abaixo:

public class TesteController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Salvar()
    {
        TempData["mensagem"] = "Mensagem de sucesso";
        return RedirectToAction("Index");
    }
}

Note que criei a entrada “mensagem” na coleção TempData, dentro da action Salvar, que só é chamada via POST.

2) Criamos a view Index, a qual servirá para chamarmos a action Salvar e para exibir a mensagem em TempData[“mensagem”].

Obs.: Para criar a view de forma rápida, basta clicar com o botão direito dentro do corpo da action Index e entrar em “Add View…”. Deixe o nome como “Index” e não marque a opção para criar uma view fortemente tipada.

A view deverá se parecer com (usando a view engine Razor *):

<div>
@TempData["mensagem"]
</div>

@using (Html.BeginForm("Salvar", "Teste"))
{
    <input type="submit" value="OK" />
}

Por simplicidade, exibi apenas o conteúdo dentro da tab <body>. Veja que o helper BeginForm “aponta” para a action “Salvar” do controller “Teste”.

Percebam também que na mesma view estou exibindo o contéudo de TempData, em: @TempData[“mensagem”].

3) Prontinho. Agora é testar. Rode a aplicação e acesse a view Index (http://localhost:xxxxx/Teste/).

Ao acessar a view, a única coisa disponível será o botão “OK”. Clique no botão para chamar a action “Salvar” e preencher o TempData.

Após ser redirecionado para a view Index, você verá que a mensagem em TempData será exibida:

4) Ok. Agora para comprovarmos o tempo de vida da coleção, experimente atualizar a página (F5). Ao ser feita uma nova requisição HTTP que irá ler o TempData, ele simplesmente é descartado e você verá novamente apenas o botão OK.

Você pode também testar se a entrada em TempData é diferente de null, antes de exibi-la, caso haja, por exemplo, a intenção de mostrá-la com algum texto ou formatação especial:

@if (TempData["mensagem"] != null)
{
    <div>
    Atenção: @TempData["mensagem"]
    </div>
}

Simples né?

Conclusão:

A coleção TempData é bastante útil para exibir mensagem temporárias, tais como mensagens de sucesso após retornar de algum cadastro, já que desejamos que a mensagem seja exibida apenas naquele momento (e desapareça caso formos para outro link e voltar ou atualizarmos a página).

Até a próxima!

* Ainda não conhece o Razor? Ele é uma nova View Engine  lançada mês passado com o ASP.NET MVC 3. Baixe o MVC 3 aqui e divirta-se!