I have a base Controller like follow
 public abstract class BaseController
    {
        protected ActionResult LogOn(LogOnViewModel viewModel)
        {
            SaveTestCookie();
            var returnUrl = "";
            if (HttpContext != null && HttpContext.Request != null && HttpContext.Request.UrlReferrer != null)
            {
                returnUrl = HttpContext.Request.UrlReferrer.LocalPath;
            }
            TempData["LogOnViewModel"] = viewModel;
            return RedirectToAction("ProceedLogOn", new { returnUrl });
        }
        public ActionResult ProceedLogOn(string returnUrl)
        {
            if (CookiesEnabled() == false)
            {
                return RedirectToAction("logon", "Account", new { area = "", returnUrl, actionType, cookiesEnabled = false });
            }
            var viewModel = TempData["LogOnViewModel"] as LogOnViewModel;
            if (viewModel == null)
            {
                throw new NullReferenceException("LogOnViewModel is not found in tempdata");
            }
            //Do something
            //the problem is I missed the values which are set in the ViewBag
        }
    }
and another Controller
public class MyController : BaseController
    {
        [HttpPost]
        public ActionResult LogOn(LogOnViewModel viewModel)
        {
            // base.LogOn is used in differnet controller so I saved some details in view bag 
            ViewBag.Action = "LogonFromToolbar";
            ViewBag.ExtraData = "extra data related only for this action";
            return base.LogOn(viewModel);
        }
    }
the problem is I missed the view bag values in ProceedLogOn action method. I have the values in Logon method in BaseController.
How can I copy the values of ViewBag from one Action to another Action?
So I can not simply say  this.ViewBag=ViewBag;
because ViewBag doesn't have setter. I was thinking of Iterating through viewbag.
I tried ViewBag.GetType().GetFields() and ViewBag.GetType().GetProperties() but they return nothing.