+1-888-365-2779
Try Now
More in this section

Forums / Developing with Sitefinity / Did something change with how HttpContext.Items and MVC controls works?

Did something change with how HttpContext.Items and MVC controls works?

2 posts, 0 answered
  1. Stacey
    Stacey avatar
    291 posts
    Registered:
    18 Oct 2012
    02 May 2014
    Link to this post

    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"];
            }
     
            #endregion

    In 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>
     
        }
    }

  2. Stacey
    Stacey avatar
    291 posts
    Registered:
    18 Oct 2012
    02 May 2014
    Link to this post

    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.

2 posts, 0 answered