Where to initialize TempData before any Action?

时间:2018-02-03 09:29:59

标签: asp.net ajax tempdata

The Attach method is an ajax call made to change the variable stored inside TempData so that when the user refreshes the Index page the changes to persist. !

I tried initializing the TempData inside the constructor of the controller but the TempData object is null at that time.Where is TempData initialized and how can i populate it before any Action if not in constructor?

P.S I have also tried to maintain state by using a static variable (before TempData) but it does not work.

class MyController
{
            public LocationController(TreasureContext con)
            {
                TempData.Put<string>("checkboxesState","enabled"); //tempdata is null here
                this.context = con;
            }

            [HttpGet]
            public IActionResult Index() 
            {   
                ViewData["tstory"]=JsonConvert.SerializeObject(TempData.Get<Story>("tstory"));
                ViewData["checkboxesState"]=JsonConvert.SerializeObject(TempData.Get<string>("chkState")); //tempdata value is sent to the view to set some checkboxes 
                if(ViewData["tstory"]!=null)
                {
                ViewData["tlocations"]=JsonConvert.SerializeObject(TempData.Get<IEnumerable<long>>("tlocations"));
                TempData.Keep();
                return View(context.Locations);
                }
                return RedirectToAction("Index","Story");
             }
}


        [HttpPost, ActionName("Attach")]
        public bool Attach([FromBody]List<Location> locations)
        {

                this.TempData.Put<string>("chkState",Constants.JS.CbxDisabled);
                return true; 
        }

Tempdata extensions:

public static void Put<T>(this ITempDataDictionary tempData, string key, T value)
        {
            tempData[key]=JsonConvert.SerializeObject(value);
        }
        public static T Get<T>(this ITempDataDictionary tempData, string key) where T : class
        {
        object o;
        tempData.TryGetValue(key, out o);
        return o == null ? null : JsonConvert.DeserializeObject<T>((string)o);
        }

0 个答案:

没有答案