Don't miss out Virtual Happy Hour this Friday (April 26).

Try our conversational search powered by Generative AI!

Asynchronous calls b0rken in editmode

Vote:
 

All our asynchronous calls like searchbox-autocomplete, menu expansion etc are broken when triggered from inside edit mode, since the URL is changed.

For instance, a normal call to the asynch submenu:

http://localhost/SomePage/Submenu/?22

Will transform into this, when triggered in edit mode:

http://localhost/EPiServer/CMS/Content/SomePage,,168_520/Submenu/?id=168_520&epieditmode=true?22

This request ends with a 404 and a sad face...

We're using MVC (love it!!!) and wondering if there may be some magic routing config that can help us handle these scenarios?

#72257
Jun 11, 2013 22:34
Vote:
 

Bump! Are there any recommendations from Episerver in this matter? Surely there are more sites out there that use asynchronous calls that needs to be working in editmode?

#72663
Jun 25, 2013 21:46
Vote:
 

We had the same issue today... What you need to do is force the URL to be the public-facing (non Edit Mode) URL.

Knowing this, you'll find this topic: http://world.episerver.com/Modules/Forum/Pages/Thread.aspx?id=66580)... which states there is a bug (#91931) that prevents this. This bug was fixed, but is not available until (hopefully) EPiServer 7.5 (see comments in http://world.episerver.com/Articles/Items/EPiServer-7---Patch-3/)

The current workaround is this code, which we put outside of the controller in a static class:

public static string GetPublicUrl(ContentReference contentLink, string language, RouteValueDictionary routeValues = null)
{
    RequestContext requestContext = new RequestContext();
    requestContext.RouteData = new RouteData();

    requestContext.RouteData.DataTokens.Add("contextmode", ContextMode.Default);

    if (routeValues == null)
    {
        routeValues = new RouteValueDictionary();
    }

    var urlResolver = new UrlResolver();
    var contextSaved = HttpContext.Current;
    HttpContext.Current = null;

    var url = urlResolver.GetVirtualPath(contentLink, language, routeValues, requestContext).GetUrl();

    HttpContext.Current = contextSaved;

    return url;
}

    

#72665
Jun 25, 2013 23:08
This thread is locked and should be used for reference only. Please use the Episerver CMS 7 and earlier versions forum to open new discussions.
* You are NOT allowed to include any hyperlinks in the post because your account hasn't associated to your company. User profile should be updated.