MVC enables you to cache data across requests using the TempData dictionary. This is handy when your doing a post-redirect-get:

[HttpPost]
public ActionResult Register(UserRegistration registration)
{
    // ...
    TempData["user-registration"] = registration;
    return RedirectToAction("RegisterSuccess");
}

public ActionResult RegisterSuccess()
{
    return View(TempData["user-registration"]);
}

Since this is so common why not have a type safe method sans magic strings:

[HttpPost]
public ActionResult Register(UserRegistration registration)
{
    // ...
    TempData.Model<UserRegistration>().Current = registration;
    return RedirectToAction("RegisterSuccess");
}

public ActionResult RegisterSuccess()
{
    return View(TempData.Model<UserRegistration>().Current);
}

Here is the implementation:

public static class TempDataDictionaryExtensions
{
    public static TempModelContext<T> Model<T>(this TempDataDictionary tempData)
    { return new TempModelContext<T>(tempData); }

    public class TempModelContext<T>
    {
        private readonly TempDataDictionary _tempData;
        private readonly string _key = "__TYPE#" + typeof(T).Name;

        public TempModelContext(TempDataDictionary tempData)
        { _tempData = tempData; }

        public T Current
        {
            get { return _tempData.ContainsKey(_key) ? 
                         (T)_tempData[_key] : default(T); }
            set { _tempData[_key] = value; }
        }
    }
}