Did something change with how HttpContext.Items and MVC controls works?
I upgraded a 6.3 site that has a few MVC widgets that use HttpContext to communicate with each other and then display data. This works fine in my 6.3 site, but when I upgraded it to 7.0 these widgets no longer render any content.
Through debugging I found out that at some point HttpContext.Items is empty.
Here is how I have it setup:
I have a manager widget where I assign what category I want to pull images from. This manager should then create the collection and store it in HttpContext so that another widget can pull from it.
Here are the actions:
public ActionResult Index() var model = InitializeModel(); return View("Default"); protected override void HandleUnknownAction(string actionName) var model = InitializeModel(); View("Default").ExecuteResult(this.ControllerContext); I am not going to post all the model code, but at the end of that InitializeModel() it checks this:
if (model.Tombstones != null && model.Tombstones.Count > 0) if (HttpContext.Items["Tombstones"] == null) HttpContext.Items.Add("Tombstones", model.Tombstones); return model;Now I used the VS debugger and confirmed at this point that there is indeed a collection being found and it does create the HttpContext.Items["Tombstones"] object
Now on the same page I have a second widget that will check for that object and then call out to its view to render the collection of images.
public ActionResult Index() InitializeControls(); return View("Default"); protected override void HandleUnknownAction(string actionName) InitializeControls(); View("Default").ExecuteResult(this.ControllerContext); #region Methods private void InitializeControls() if (HttpContext.Items["Tombstones"] != null) ViewBag.Tombstones = HttpContext.Items["Tombstones"]; #endregionIn my 6.3 site I can see in VS that HttpContext.Items has roughly 83 items and HttpContext.Items["Tombstones"] has the collection of images I want. The 7.0 site shows that HttpContext.Items has a count of "0" so nothing ever renders.
My manager view does not render anything and is only to setup the HttpContext. My images view looks something like this.
@using SitefinityWebApp.Mvc.Models.AdsManager@if (ViewBag.Tombstones != null) foreach (TombstoneAd item in ViewBag.Tombstones.Values) <a href="@item.NavigateUrl" target="_blank"> <img class="border" src="@item.ImageUrl" alt="@item.Caption" width="@item.Width" height="@item.Height" /> </a> I think I might have a solution that works. If I use SystemManager.CurrentHttpContext which is Sitefinity's wrapper to store the information it seems to be a happy camper.