Quero compartilhar com vocês uma forma fácil de passar dados de uma Action para outra. Usualmente quando precisamos fazer isso, recorremos a Session ou algum parâmetro passado via GET. Com o MVC 3 temos agora o TempData.

TempData é um dicionário de dados que tem por trás um objeto de sessão. Este objeto persiste os valores por apenas uma requisição. É ideal para enviar mensagens de um controlador para outro.

Segue um exemplo:

public class InsertError
{
    public string ErrorMessage { get; set; }
    public string OriginalFirstName { get; set; }
    public string OriginalLastName { get; set; }
}

Enviaremos uma instância dessa classe entre uma requisição e outra, usualmente guardamos no TempData mensagens de erro e IDs entre uma requisição e outra.

E agora as nossas Actions. São duas actions no mesmo controlador:

public ActionResult InsertCustomer(string firstName, string lastName)
{
    // Verifica por erros
    if (String.IsNullOrEmpty(firstName) ||
            String.IsNullOrEmpty(lastName))
    {
        InsertError error = new InsertError();
        error.ErrorMessage = "Os nomes são obrigatórios.";
        error.OriginalFirstName = firstName;
        error.OriginalLastName = lastName;
        TempData["error"] = error;
        return RedirectToAction("NewCustomer");
    }
    // Sem erros
    // ...
    return View();
}

public ActionResult NewCustomer()
{
    InsertError err = TempData["error"] as InsertError;
    if (err != null)
    {
        // Se recebermos uma variável do tipo InsertError nós a exibimos.
        ViewData["FirstName"] = err.OriginalFirstName;
        ViewData["LastName"] = err.OriginalLastName;
        ViewData["ErrorMessage"] = err.ErrorMessage;
    }
    // ...
    return View();
}

Nesse exemplo passamos um objeto InsertError diretamente da Action InsertCustomer para a Action NewCustomer. No nosso caso é uma classe que guarda dados de uma mensagem de erro.

O exemplo anterior foi retirado da MSDN http://msdn.microsoft.com/en-us/library/dd394711.aspx

Obrigado ao @miguelitobh pela sugestão de tema. Se você também tem uma sugestão me mande uma mensagem no @ivanpaulovich.