Hi!
Can you please provide the code you currently have in ImageFile.cshtml?
Oh, I just remembered you have to have a Image.cshtml display template as well. This is the simplest example:
@model EPiServer.Core.ContentReference @if (!ContentReference.IsNullOrEmpty(Model)) { <img src="@Url.ContentUrl(Model)"> }
I added the Image.cshtml but to no avail. Do i need a model definition specifically for image as well?
Now i have:
[ContentType(DisplayName = "ImageType", GUID = "45096789-c050-4009-b1f8-b939de7b0298", Description = "")] [MediaDescriptor(ExtensionString = "gif,png,jpg,jpeg")] public class ImageFile : MediaData { [CultureSpecific] [Editable(true)] [Display( Name = "Description", Description = "Description", GroupName = SystemTabNames.Content, Order = 1)] public virtual String Description { get; set; } }
The Imagefile.cshtml is
@using EPiServer.Core @using EPiServer.Web.Mvc.Html @using EPiServer8.Models.Media @model ContentReference @{ // Get the the MediaData object being rendered var currentContent = !ContentReference.IsNullOrEmpty(Model) ? EPiServer.ServiceLocation.ServiceLocator.Current.GetInstance<EPiServer.IContentLoader>().Get<MediaData>(Model) : null; } @if (currentContent is ImageFile) // Images should be rendered with an image tag and an alt text { var image = (ImageFile)currentContent; @*<img src="@UrlResolver.Current.GetUrl(image.ContentLink)">*@ <img src="@EPiServer.Web.Routing.UrlResolver.Current.GetUrl(image.ContentLink)" alt="@image.Description" widht="100" height="100" /> } else if (currentContent is ImageData) { <p>bla</p> } else if (currentContent != null) // For all other media types, simply render a link { <a href="@EPiServer.Web.Routing.UrlResolver.Current.GetUrl(currentContent.ContentLink)">@currentContent.Name</a> }
Wow Erik,
Thank you, that solved part of the problem. I can now select images in the richtexteditor and i see previews, and i can open them in the image editor! Woohoo!
The thing that still doesn't work is to drag an image directly into a contentarea (instead of a block). Should this work?
For it to work in a contentarea you need a view in one of your partial view folders (standard is ~/Views/Shared) that match the name of the content type (ImageFile.cshtml in your case) and with ImageFile as Model type:
@model Whatever.Your.Namespace.Is.ImageFile @if (Model != null) { <img src="@Url.ContentUrl(Model.ContentLink)" alt="@Model.Description"> }
And thank you also Matthias! I was not expecting it to put in the /Views/Shared folder. I put it in /Views/Shared/DisplayTemplates
Thanks so much guys for such a rapid response, it helped a bunch!
If you are wondering about content template (in your case - that you need to place ImageFile inside one of your partial views folders) you may find interesting template model selection process I described in much details here: http://blog.tech-fellow.net/2015/05/30/content-area-under-the-hood-part-2/. Look for "What happens after template is selected?" section.
Heya
I'm working on a new project with EPiServer 8 project and I'm struggling to get image assets working.. I'm writting a reply on this thread because this has been the closest I've found to demonstrating how to get them working.
I have an ImageFile class:
[ContentType( DisplayName = "Image File", GUID = "bd03e5f7-8e6d-4357-b2c8-fbf093170d98")] [MediaDescriptor(ExtensionString = "jpg,jpeg,jpe,ico,gif,bmp,png")] public class ImageFile : ImageData
and I have an image on a content type:
[UIHint(UIHint.Image)] [Display( Name = "Main Image", Description = "Main image for the content", GroupName = SystemTabNames.Content, Order = 200)] public virtual ContentReference MainImage { get; set; }
And an Image.cshtml with:
@model ContentReference <img src="@Url.ContentUrl(Model)" />
This works well for edit mode (on page editing and previewing) but never works for a visitor on the published page!? I get a missing image and when browsing directly to the image's friendly URL, something like http://mysite.local/globalassets/media/images/test.jpg, I get a page with distinctive EPiServer styling containing the message "Preview is not available for this item."
This is my first EPiServer post v7.5 so probably something I haven't understood yet - what am I missing?
You should be able to browse ordinary image using its direct friendly url. Do you have any kind of interceptors somewhere regsitered that are handling requests to image files? Are you using image as standalone property and render it somethink like @Html.PropertyFor(m => m.MainImage) or you are referring to case when image is used inside content area?
Oh, you're right, I forgot to mention I am using @Html.PropertyFor(m => m.CurrentPage.MainImage) to attempt rendering it.
I guess I can confidently say the Image.cshtml is definitely getting rendered since the markup is coming out.. So I can narrow the problem to simply that going to the image's friendly URL doesn't work - it always show's the same EPiServer message "Preview is not available for this item."
Any thoughts on why that would happen?
What happens when you navigate directly to the image in EPiServer UI from Media pane?
From the media pane I can double click the ImageFile asset and it'll open up the preview and that renders the image correctly. The only thing interesting to note is that clicking the "Options > Download this file" streams down a corrupted jpg and when I view the file content in a text editor it has the EPiServer styled HTML page markup including the same:
<div class="epieditpaneltitle"> <span class="EP-systemMessage"> Preview is not available for this item. </span> </div>
:-/ Thoughts?
This is strange. If you replicate the same code to AlloyTech. Does it work correctly there? If you enable verbose logging what does log file say when you browse for your image?
Good ideas, will try that out - BTW do you know where to get the Alloy code these days?
Firstly, thanks for pointing out where to get Alloy :) I hadn't figured where to get it for a good while now (I'm sure I used to download it directly from world).
So I've enabled verbose logging and tested three scenarios: loading the image directly using the file URL for visitors (friendly), then the file URL that the on-page editor does, and finally using an image from the Alloy site.
1) Browsing to the file URL for visitors (friendly) - this fails to load the image (it results in the "Preview is not available for this item." page) - here is the epi log output:
2015-07-09 11:16:22,034 [20] DEBUG EPiServer.Security.VirtualRoleAuthorizationSession: The current principal does not have any claims identities added to the Identities collection, one will be added (actual type=System.Web.Security.RolePrincipal) 2015-07-09 11:16:22,043 [20] DEBUG EPiServer.Shell.Web.Routing.ModuleRouteCollection: Not routing '~/globalassets/media/images/netpagedefinitionsave_stringtruncationissue.jpg' since it doesn't start with '~/EPiServer/EPiServer.Commerce.Shell/8.11.0.611' 2015-07-09 11:16:22,059 [20] DEBUG EPiServer.Shell.Web.Routing.ModuleRouteCollection: Not routing '~/globalassets/media/images/netpagedefinitionsave_stringtruncationissue.jpg' since it doesn't start with '~/EPiServer/CMS/8.1.0.0' 2015-07-09 11:16:22,073 [20] DEBUG EPiServer.Shell.Web.Routing.ModuleRouteCollection: Not routing '~/globalassets/media/images/netpagedefinitionsave_stringtruncationissue.jpg' since it doesn't start with '~/EPiServer/Shell/8.1.0.0' 2015-07-09 11:16:22,080 [20] DEBUG EPiServer.Shell.Web.Routing.ModuleRouteCollection: Not routing '~/globalassets/media/images/netpagedefinitionsave_stringtruncationissue.jpg' since it doesn't start with '~/EPiServer/EPiServer.Packaging.UI/3.2.1.0' 2015-07-09 11:16:22,088 [20] DEBUG EPiServer.Shell.Web.Routing.ModuleRouteCollection: Not routing '~/globalassets/media/images/netpagedefinitionsave_stringtruncationissue.jpg' since it doesn't start with '~/EPiServer/EPiServer.Commerce.Shell.ManagerIntegration/8.11.0.611' 2015-07-09 11:16:22,099 [20] DEBUG EPiServer.Shell.Web.Routing.ModuleRouteCollection: Not routing '~/globalassets/media/images/netpagedefinitionsave_stringtruncationissue.jpg' since it doesn't start with '~/EPiServer/Commerce/8.11.0.611' 2015-07-09 11:16:22,120 [20] DEBUG EPiServer.Shell.Web.Routing.ModuleRouteCollection: Not routing '~/globalassets/media/images/netpagedefinitionsave_stringtruncationissue.jpg' since it doesn't start with '~/EPiServer/Find' 2015-07-09 11:16:22,132 [20] DEBUG EPiServer.Shell.Web.Routing.ModuleRouteCollection: Not routing '~/globalassets/media/images/netpagedefinitionsave_stringtruncationissue.jpg' since it doesn't start with '~/EPiServer/EPiServer.Commerce.UI' 2015-07-09 11:16:22,142 [20] DEBUG EPiServer.Shell.Web.Routing.ModuleRouteCollection: Not routing '~/globalassets/media/images/netpagedefinitionsave_stringtruncationissue.jpg' since it doesn't start with '~/modules' 2015-07-09 11:16:22,149 [20] DEBUG EPiServer.Shell.Web.Routing.ModuleRouteCollection: Not routing '~/globalassets/media/images/netpagedefinitionsave_stringtruncationissue.jpg' since it doesn't start with '~/episerver' 2015-07-09 11:16:22,161 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch 2015-07-09 11:16:22,174 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch 2015-07-09 11:16:22,191 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, calling CacheManager.Get for key 2015-07-09 11:16:22,199 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, CacheManager.Get returned object of type EPiServer.DataAbstraction.LanguageBranchCollection[] for key 2015-07-09 11:16:22,208 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, returning object of type TObject 2015-07-09 11:16:22,217 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, returning an object of type TObject 2015-07-09 11:16:22,225 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch 2015-07-09 11:16:22,239 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch 2015-07-09 11:16:22,247 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, calling CacheManager.Get for key 2015-07-09 11:16:22,261 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, CacheManager.Get returned object of type EPiServer.DataAbstraction.LanguageBranchCollection[] for key 2015-07-09 11:16:22,283 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, returning object of type TObject 2015-07-09 11:16:22,303 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, returning an object of type TObject 2015-07-09 11:16:22,319 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:6:globalassets 2015-07-09 11:16:22,336 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:6:globalassets 2015-07-09 11:16:22,359 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:6:globalassets, retry 1, calling CacheManager.Get for key 2015-07-09 11:16:22,377 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:6:globalassets, retry 1, CacheManager.Get returned object of type System.Collections.ObjectModel.ReadOnlyCollection`1[[EPiServer.Core.MatchingSegmentResult, EPiServer, Version=8.2.0.0, Culture=neutral, PublicKeyToken=8fe83dea738b45b7]] for key 2015-07-09 11:16:22,408 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:6:globalassets, retry 1, returning object of type TObject 2015-07-09 11:16:22,424 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:6:globalassets, returning an object of type TObject 2015-07-09 11:16:22,434 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:6:globalassets 2015-07-09 11:16:22,457 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:6:globalassets 2015-07-09 11:16:22,466 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:6:globalassets, retry 1, calling CacheManager.Get for key 2015-07-09 11:16:22,481 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:6:globalassets, retry 1, CacheManager.Get returned object of type System.Collections.ObjectModel.ReadOnlyCollection`1[[EPiServer.Core.MatchingSegmentResult, EPiServer, Version=8.2.0.0, Culture=neutral, PublicKeyToken=8fe83dea738b45b7]] for key 2015-07-09 11:16:22,497 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:6:globalassets, retry 1, returning object of type TObject 2015-07-09 11:16:22,510 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:6:globalassets, returning an object of type TObject 2015-07-09 11:16:22,517 [20] DEBUG EPiServer.Commerce.Catalog.CatalogContentLanguageSettingsHandler: Calling 'Get' with parameter values: 6 2015-07-09 11:16:22,530 [20] DEBUG EPiServer.Commerce.Catalog.CatalogContentLanguageSettingsHandler: Calling 'GetClosestSetting' with parameter values: 6 2015-07-09 11:16:22,537 [20] DEBUG EPiServer.Web.Routing.Segments.NodeSegment: Url 'http://buybook.local/globalassets/media/images/netpagedefinitionsave_stringtruncationissue.jpg' was routed to content with id '6' and language was set to '' 2015-07-09 11:16:22,546 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch 2015-07-09 11:16:22,553 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch 2015-07-09 11:16:22,563 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, calling CacheManager.Get for key 2015-07-09 11:16:22,570 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, CacheManager.Get returned object of type EPiServer.DataAbstraction.LanguageBranchCollection[] for key 2015-07-09 11:16:22,579 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, returning object of type TObject 2015-07-09 11:16:22,586 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, returning an object of type TObject 2015-07-09 11:16:22,596 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch 2015-07-09 11:16:22,603 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch 2015-07-09 11:16:22,612 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, calling CacheManager.Get for key 2015-07-09 11:16:22,620 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, CacheManager.Get returned object of type EPiServer.DataAbstraction.LanguageBranchCollection[] for key 2015-07-09 11:16:22,635 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, returning object of type TObject 2015-07-09 11:16:22,646 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, returning an object of type TObject 2015-07-09 11:16:22,658 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch 2015-07-09 11:16:22,668 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch 2015-07-09 11:16:22,682 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, calling CacheManager.Get for key 2015-07-09 11:16:22,691 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, CacheManager.Get returned object of type EPiServer.DataAbstraction.LanguageBranchCollection[] for key 2015-07-09 11:16:22,700 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, returning object of type TObject 2015-07-09 11:16:22,713 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, returning an object of type TObject 2015-07-09 11:16:22,723 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch 2015-07-09 11:16:22,731 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch 2015-07-09 11:16:22,739 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, calling CacheManager.Get for key 2015-07-09 11:16:22,746 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, CacheManager.Get returned object of type EPiServer.DataAbstraction.LanguageBranchCollection[] for key 2015-07-09 11:16:22,753 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, returning object of type TObject 2015-07-09 11:16:22,768 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, returning an object of type TObject 2015-07-09 11:16:22,783 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:3:media 2015-07-09 11:16:22,799 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:3:media 2015-07-09 11:16:22,834 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:3:media, retry 1, calling CacheManager.Get for key 2015-07-09 11:16:22,883 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:3:media, retry 1, CacheManager.Get returned object of type System.Collections.ObjectModel.ReadOnlyCollection`1[[EPiServer.Core.MatchingSegmentResult, EPiServer, Version=8.2.0.0, Culture=neutral, PublicKeyToken=8fe83dea738b45b7]] for key 2015-07-09 11:16:22,891 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:3:media, retry 1, returning object of type TObject 2015-07-09 11:16:22,901 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:3:media, returning an object of type TObject 2015-07-09 11:16:22,927 [20] DEBUG EPiServer.Commerce.Catalog.CatalogContentLanguageSettingsHandler: Calling 'Get' with parameter values: 7 2015-07-09 11:16:22,948 [20] DEBUG EPiServer.Commerce.Catalog.CatalogContentLanguageSettingsHandler: Calling 'GetClosestSetting' with parameter values: 7 2015-07-09 11:16:22,969 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:7:images 2015-07-09 11:16:22,984 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:7:images 2015-07-09 11:16:22,998 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:7:images, retry 1, calling CacheManager.Get for key 2015-07-09 11:16:23,014 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:7:images, retry 1, CacheManager.Get returned object of type System.Collections.ObjectModel.ReadOnlyCollection`1[[EPiServer.Core.MatchingSegmentResult, EPiServer, Version=8.2.0.0, Culture=neutral, PublicKeyToken=8fe83dea738b45b7]] for key 2015-07-09 11:16:23,049 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:7:images, retry 1, returning object of type TObject 2015-07-09 11:16:23,067 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:7:images, returning an object of type TObject 2015-07-09 11:16:23,097 [20] DEBUG EPiServer.Commerce.Catalog.CatalogContentLanguageSettingsHandler: Calling 'Get' with parameter values: 8 2015-07-09 11:16:23,136 [20] DEBUG EPiServer.Commerce.Catalog.CatalogContentLanguageSettingsHandler: Calling 'GetClosestSetting' with parameter values: 8 2015-07-09 11:16:23,161 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:8:netpagedefinitionsave_stringtruncationissue.jpg 2015-07-09 11:16:23,215 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:8:netpagedefinitionsave_stringtruncationissue.jpg 2015-07-09 11:16:23,233 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:8:netpagedefinitionsave_stringtruncationissue.jpg, retry 1, calling CacheManager.Get for key 2015-07-09 11:16:23,269 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:8:netpagedefinitionsave_stringtruncationissue.jpg, retry 1, CacheManager.Get returned object of type System.Collections.ObjectModel.ReadOnlyCollection`1[[EPiServer.Core.MatchingSegmentResult, EPiServer, Version=8.2.0.0, Culture=neutral, PublicKeyToken=8fe83dea738b45b7]] for key 2015-07-09 11:16:23,297 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:8:netpagedefinitionsave_stringtruncationissue.jpg, retry 1, returning object of type TObject 2015-07-09 11:16:23,315 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EPSegmentData:8:netpagedefinitionsave_stringtruncationissue.jpg, returning an object of type TObject 2015-07-09 11:16:23,331 [20] DEBUG EPiServer.Commerce.Catalog.CatalogContentLanguageSettingsHandler: Calling 'Get' with parameter values: 1816 2015-07-09 11:16:23,347 [20] DEBUG EPiServer.Commerce.Catalog.CatalogContentLanguageSettingsHandler: Calling 'GetClosestSetting' with parameter values: 1816 2015-07-09 11:16:23,366 [20] DEBUG EPiServer.Commerce.Catalog.CatalogContentLanguageSettingsHandler: Calling 'Get' with parameter values: 1816 2015-07-09 11:16:23,381 [20] DEBUG EPiServer.Commerce.Catalog.CatalogContentLanguageSettingsHandler: Calling 'GetClosestSetting' with parameter values: 1816 2015-07-09 11:16:23,400 [20] DEBUG EPiServer.Web.Routing.Segments.NodeSegment: Url 'http://buybook.local/globalassets/media/images/netpagedefinitionsave_stringtruncationissue.jpg' was routed to content with id '1816' and language was set to '' 2015-07-09 11:16:23,418 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch 2015-07-09 11:16:23,436 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch 2015-07-09 11:16:23,450 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, calling CacheManager.Get for key 2015-07-09 11:16:23,464 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, CacheManager.Get returned object of type EPiServer.DataAbstraction.LanguageBranchCollection[] for key 2015-07-09 11:16:23,483 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, returning object of type TObject 2015-07-09 11:16:23,495 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, returning an object of type TObject 2015-07-09 11:16:23,504 [20] DEBUG EPiServer.Web.TemplateResolver: ImageFile: Selected EPiServer.Cms.Shell.UI.Controllers.Preview.DefaultMediaPreviewController. (tag='', channel='', category='MvcController') 2015-07-09 11:16:23,520 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch 2015-07-09 11:16:23,542 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch 2015-07-09 11:16:23,558 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, calling CacheManager.Get for key 2015-07-09 11:16:23,566 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, CacheManager.Get returned object of type EPiServer.DataAbstraction.LanguageBranchCollection[] for key 2015-07-09 11:16:23,584 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, returning object of type TObject 2015-07-09 11:16:23,608 [20] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, returning an object of type TObject 2015-07-09 11:16:23,619 [20] DEBUG EPiServer.Commerce.Catalog.CatalogContentLanguageSettingsHandler: Calling 'Get' with parameter values: 1816 2015-07-09 11:16:23,641 [20] DEBUG EPiServer.Commerce.Catalog.CatalogContentLanguageSettingsHandler: Calling 'GetClosestSetting' with parameter values: 1816 2015-07-09 11:16:23,651 [20] DEBUG EPiServer.Web.TemplateResolver: ImageFile: Selected EPiServer.Cms.Shell.UI.Controllers.Preview.DefaultMediaPreviewController. (tag='', channel='', category='Page') 2015-07-09 11:16:23,688 [20] DEBUG EPiServer.Commerce.Catalog.CatalogContentLanguageSettingsHandler: Calling 'Get' with parameter values: 1816 2015-07-09 11:16:23,704 [20] DEBUG EPiServer.Commerce.Catalog.CatalogContentLanguageSettingsHandler: Calling 'GetClosestSetting' with parameter values: 1816
2) Browsing to the file URL that the on-page editor does (this works):
2015-07-09 11:41:01,925 [32] DEBUG EPiServer.Security.VirtualRoleAuthorizationSession: The current principal does not have any claims identities added to the Identities collection, one will be added (actual type=System.Web.Security.RolePrincipal) 2015-07-09 11:41:01,938 [32] DEBUG EPiServer.Shell.Web.Routing.ModuleRouteCollection: Not routing '~/EPiServer/CMS/Content/globalassets/en/media/images/netpagedefinitionsave_stringtruncationissue.jpg,,1816' since it doesn't start with '~/EPiServer/EPiServer.Packaging.UI/3.2.1.0' 2015-07-09 11:41:01,948 [32] DEBUG EPiServer.Shell.Web.Routing.ModuleRouteCollection: Not routing '~/EPiServer/CMS/Content/globalassets/en/media/images/netpagedefinitionsave_stringtruncationissue.jpg,,1816' since it doesn't start with '~/EPiServer/Commerce/Shell/8.11.0.611' 2015-07-09 11:41:01,951 [32] DEBUG EPiServer.Shell.Web.Routing.ModuleRouteCollection: Not routing '~/EPiServer/CMS/Content/globalassets/en/media/images/netpagedefinitionsave_stringtruncationissue.jpg,,1816' since it doesn't start with '~/EPiServer/CMS/8.1.0.0' 2015-07-09 11:41:01,953 [32] DEBUG EPiServer.Shell.Web.Routing.ModuleRouteCollection: Not routing '~/EPiServer/CMS/Content/globalassets/en/media/images/netpagedefinitionsave_stringtruncationissue.jpg,,1816' since it doesn't start with '~/EPiServer/Commerce/Manager/8.11.0.611' 2015-07-09 11:41:01,955 [32] DEBUG EPiServer.Shell.Web.Routing.ModuleRouteCollection: Not routing '~/EPiServer/CMS/Content/globalassets/en/media/images/netpagedefinitionsave_stringtruncationissue.jpg,,1816' since it doesn't start with '~/EPiServer/Shell/8.1.0.0' 2015-07-09 11:41:01,959 [32] DEBUG EPiServer.Shell.Web.Routing.ModuleRouteCollection: Not routing '~/EPiServer/CMS/Content/globalassets/en/media/images/netpagedefinitionsave_stringtruncationissue.jpg,,1816' since it doesn't start with '~/EPiServer/EPiServer.Commerce.UI' 2015-07-09 11:41:01,964 [32] DEBUG EPiServer.Shell.Web.Routing.ModuleRouteCollection: Not routing '~/EPiServer/CMS/Content/globalassets/en/media/images/netpagedefinitionsave_stringtruncationissue.jpg,,1816' since it doesn't start with '~/EPiServer/Find' 2015-07-09 11:41:01,966 [32] DEBUG EPiServer.Shell.Web.Routing.ModuleRouteCollection: Not routing '~/EPiServer/CMS/Content/globalassets/en/media/images/netpagedefinitionsave_stringtruncationissue.jpg,,1816' since it doesn't start with '~/EPiServer/Commerce/8.11.0.611' 2015-07-09 11:41:01,968 [32] DEBUG EPiServer.Shell.Web.Routing.ModuleRouteCollection: None of the '8' route collection for path '~/episerver' wants to handle the path: ~/EPiServer/CMS/Content/globalassets/en/media/images/netpagedefinitionsave_stringtruncationissue.jpg,,1816 2015-07-09 11:41:01,970 [32] DEBUG EPiServer.Shell.Web.Routing.ModuleRouteCollection: Not routing '~/EPiServer/CMS/Content/globalassets/en/media/images/netpagedefinitionsave_stringtruncationissue.jpg,,1816' since it doesn't start with '~/modules' 2015-07-09 11:41:01,972 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch 2015-07-09 11:41:01,974 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch 2015-07-09 11:41:01,977 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, calling CacheManager.Get for key 2015-07-09 11:41:01,979 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, CacheManager.Get returned object of type EPiServer.DataAbstraction.LanguageBranchCollection[] for key 2015-07-09 11:41:01,981 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, returning object of type TObject 2015-07-09 11:41:01,983 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, returning an object of type TObject 2015-07-09 11:41:01,985 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch 2015-07-09 11:41:01,987 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch 2015-07-09 11:41:01,989 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, calling CacheManager.Get for key 2015-07-09 11:41:01,991 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, CacheManager.Get returned object of type EPiServer.DataAbstraction.LanguageBranchCollection[] for key 2015-07-09 11:41:01,995 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, returning object of type TObject 2015-07-09 11:41:01,998 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, returning an object of type TObject 2015-07-09 11:41:02,001 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825 2015-07-09 11:41:02,003 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825 2015-07-09 11:41:02,005 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825, retry 1, calling CacheManager.Get for key 2015-07-09 11:41:02,008 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825, retry 1, CacheManager.Get returned object of type Navico.B2B.Buybook.Web.Models.Files.ImageFile for key 2015-07-09 11:41:02,011 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825, retry 1, returning object of type TObject 2015-07-09 11:41:02,014 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825, returning an object of type TObject 2015-07-09 11:41:02,016 [32] INFO EPiServer.Core.ContentProvider: ContentLink=1816_1825, returning ContentReference object 2015-07-09 11:41:02,018 [32] DEBUG EPiServer.Web.Routing.Segments.NodeSegment: Url 'http://buybook.local/EPiServer/CMS/Content/globalassets/en/media/images/netpagedefinitionsave_stringtruncationissue.jpg,,1816?epieditmode=False' was routed to content with id '1816_1825' and language was set to '' 2015-07-09 11:41:02,020 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch 2015-07-09 11:41:02,022 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch 2015-07-09 11:41:02,024 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, calling CacheManager.Get for key 2015-07-09 11:41:02,027 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, CacheManager.Get returned object of type EPiServer.DataAbstraction.LanguageBranchCollection[] for key 2015-07-09 11:41:02,031 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, returning object of type TObject 2015-07-09 11:41:02,033 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, returning an object of type TObject 2015-07-09 11:41:02,035 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825 2015-07-09 11:41:02,037 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825 2015-07-09 11:41:02,039 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825, retry 1, calling CacheManager.Get for key 2015-07-09 11:41:02,044 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825, retry 1, CacheManager.Get returned object of type Navico.B2B.Buybook.Web.Models.Files.ImageFile for key 2015-07-09 11:41:02,049 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825, retry 1, returning object of type TObject 2015-07-09 11:41:02,051 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825, returning an object of type TObject 2015-07-09 11:41:02,053 [32] INFO EPiServer.Core.ContentProvider: ContentLink=1816_1825, returning ContentReference object 2015-07-09 11:41:02,056 [32] DEBUG EPiServer.Web.TemplateResolver: ImageFile: Selected EPiServer.Cms.Shell.UI.Controllers.Preview.DefaultMediaPreviewController. (tag='Preview', channel='', category='MvcController') 2015-07-09 11:41:02,059 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch 2015-07-09 11:41:02,062 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch 2015-07-09 11:41:02,065 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, calling CacheManager.Get for key 2015-07-09 11:41:02,067 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, CacheManager.Get returned object of type EPiServer.DataAbstraction.LanguageBranchCollection[] for key 2015-07-09 11:41:02,069 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, retry 1, returning object of type TObject 2015-07-09 11:41:02,071 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EP:LanguageBranch, returning an object of type TObject 2015-07-09 11:41:02,073 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825 2015-07-09 11:41:02,076 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825 2015-07-09 11:41:02,080 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825, retry 1, calling CacheManager.Get for key 2015-07-09 11:41:02,083 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825, retry 1, CacheManager.Get returned object of type Navico.B2B.Buybook.Web.Models.Files.ImageFile for key 2015-07-09 11:41:02,085 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825, retry 1, returning object of type TObject 2015-07-09 11:41:02,087 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825, returning an object of type TObject 2015-07-09 11:41:02,089 [32] INFO EPiServer.Core.ContentProvider: ContentLink=1816_1825, returning ContentReference object 2015-07-09 11:41:02,092 [32] DEBUG EPiServer.Web.TemplateResolver: ImageFile: Selected EPiServer.Cms.Shell.UI.Controllers.Preview.ImagePreviewHandler. (tag='Preview', channel='', category='Page') 2015-07-09 11:41:02,096 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825 2015-07-09 11:41:02,098 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825 2015-07-09 11:41:02,100 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825, retry 1, calling CacheManager.Get for key 2015-07-09 11:41:02,102 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825, retry 1, CacheManager.Get returned object of type Navico.B2B.Buybook.Web.Models.Files.ImageFile for key 2015-07-09 11:41:02,104 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825, retry 1, returning object of type TObject 2015-07-09 11:41:02,106 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825, returning an object of type TObject 2015-07-09 11:41:02,109 [32] INFO EPiServer.Core.ContentProvider: ContentLink=1816_1825, returning ContentReference object 2015-07-09 11:41:02,114 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825 2015-07-09 11:41:02,116 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825 2015-07-09 11:41:02,119 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825, retry 1, calling CacheManager.Get for key 2015-07-09 11:41:02,121 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825, retry 1, CacheManager.Get returned object of type Navico.B2B.Buybook.Web.Models.Files.ImageFile for key 2015-07-09 11:41:02,123 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825, retry 1, returning object of type TObject 2015-07-09 11:41:02,126 [32] INFO EPiServer.Core.OptimisticCache: cacheKey=EPContentVersion:1816_1825, returning an object of type TObject 2015-07-09 11:41:02,129 [32] INFO EPiServer.Core.ContentProvider: ContentLink=1816_1825, returning ContentReference object
3) Finally, this is probably how it should be, using a standard image file URL on the alloy site:
2015-07-09 16:14:05,850 [12] DEBUG EPiServer.Security.VirtualRoleAuthorizationSession: The current principal does not have any claims identities added to the Identities collection, one will be added (actual type=System.Web.Security.RolePrincipal) 2015-07-09 16:14:05,866 [12] DEBUG EPiServer.Shell.Web.Routing.ModuleRouteCollection: Not routing '~/globalassets/alloy-meet/alloymeet.png' since it doesn't start with '~/EPiServer/CMS/8.2.2.0' 2015-07-09 16:14:05,879 [12] DEBUG EPiServer.Shell.Web.Routing.ModuleRouteCollection: Not routing '~/globalassets/alloy-meet/alloymeet.png' since it doesn't start with '~/EPiServer/Shell/8.2.2.0' 2015-07-09 16:14:05,884 [12] DEBUG EPiServer.Shell.Web.Routing.ModuleRouteCollection: Not routing '~/globalassets/alloy-meet/alloymeet.png' since it doesn't start with '~/EPiServer/EPiServer.Packaging.UI/3.2.2.0' 2015-07-09 16:14:05,889 [12] DEBUG EPiServer.Shell.Web.Routing.ModuleRouteCollection: Not routing '~/globalassets/alloy-meet/alloymeet.png' since it doesn't start with '~/episerver' 2015-07-09 16:14:05,893 [12] DEBUG EPiServer.Shell.Web.Routing.ModuleRouteCollection: Not routing '~/globalassets/alloy-meet/alloymeet.png' since it doesn't start with '~/modules' 2015-07-09 16:14:05,922 [12] DEBUG EPiServer.Web.Routing.Segments.NodeSegment: Url 'http://localhost:55979/globalassets/alloy-meet/alloymeet.png' was routed to content with id '87' and language was set to '' 2015-07-09 16:14:05,930 [12] DEBUG EPiServer.Web.TemplateResolver: ImageFile: Selected . (tag='', channel='web', category='MvcController') 2015-07-09 16:14:05,935 [12] DEBUG EPiServer.Web.TemplateResolver: ImageFile: Selected EPiServer.Web.ContentMediaHttpHandler. (tag='', channel='web', category='Page')
A few interesting differences I've noticed between logs are:
- #1 never seems to identify the content being an ImageFile
- #1 template selection never ends up selecting EPiServer.Cms.Shell.UI.Controllers.Preview.ImagePreviewHandler
- #3 (alloy) is very brief and its template selection quickly chooses EPiServer.Web.ContentMediaHttpHandler
But does anyone have any thoughts what we may have changed that might have compromised image handling?
This is the problem:
2015-07-09 11:16:23,504
Don't like that there is a Commerce handler in between. That may mess around routes (some example here).
Can you dump registered templates for ImageFile?
var repo = ServiceLocator.Current.GetInstance<TemplateModelRepository>(); var models = repo.List(typeof(ImageFile));
Also, can you check which guy is responsible for your route?
Subscribe to event somewhere (once). Bet place is initializable module:
ContentRoute.RoutedContent += ContentRoute_RoutedContent;
And then inspect this property:
private void ContentRoute_RoutedContent(object sender, RoutingEventArgs e) { var route = e.RoutingSegmentContext.RouteData; }
Hi Valdis
Thanks for your tips and assistance - I've run these with the debugger.
The repo.List(typeof(ImageFile)) got the following in the debug watch:
models Count = 6 System.Collections.Generic.IEnumerable<EPiServer.DataAbstraction.TemplateModel> {System.Collections.ObjectModel.ReadOnlyCollection<EPiServer.DataAbstraction.TemplateModel>} [0] {EPiServer.DataAbstraction.TemplateModel} EPiServer.DataAbstraction.TemplateModel AvailableWithoutTag true bool Default false bool Description null string DisplayName null string Inherit false bool Inherited false bool IsReadOnly false bool Name "ImageFile" string Path null string Tags null string[] TemplateType null System.Type TemplateTypeCategory MvcPartialView EPiServer.Framework.Web.TemplateTypeCategories [1] {EPiServer.DataAbstraction.TemplateModel} EPiServer.DataAbstraction.TemplateModel AvailableWithoutTag false bool Default false bool Description null string DisplayName null string Inherit true bool Inherited false bool IsReadOnly false bool Name "ImageFileController" string Path null string Tags {string[1]} string[] TemplateType {Name = "ImageFileController" FullName = "Navico.B2B.Buybook.Web.Controllers.ImageFileController"} System.Type {System.RuntimeType} TemplateTypeCategory MvcPartialController EPiServer.Framework.Web.TemplateTypeCategories [2] {EPiServer.DataAbstraction.TemplateModel} EPiServer.DataAbstraction.TemplateModel AvailableWithoutTag false bool Default false bool Description null string DisplayName null string Inherit true bool Inherited true bool IsReadOnly false bool Name "ImagePreviewHandler" string Path null string Tags {string[1]} string[] TemplateType {Name = "ImagePreviewHandler" FullName = "EPiServer.Cms.Shell.UI.Controllers.Preview.ImagePreviewHandler"} System.Type {System.RuntimeType} TemplateTypeCategory HttpHandler EPiServer.Framework.Web.TemplateTypeCategories [3] {EPiServer.DataAbstraction.TemplateModel} EPiServer.DataAbstraction.TemplateModel AvailableWithoutTag false bool Default false bool Description null string DisplayName null string Inherit true bool Inherited true bool IsReadOnly false bool Name "ImageEditController" string Path null string Tags {string[1]} string[] TemplateType {Name = "ImageEditController" FullName = "EPiServer.Cms.Shell.UI.Controllers.Preview.ImageEditController"} System.Type {System.RuntimeType} TemplateTypeCategory MvcController EPiServer.Framework.Web.TemplateTypeCategories [4] {EPiServer.DataAbstraction.TemplateModel} EPiServer.DataAbstraction.TemplateModel AvailableWithoutTag false bool Default false bool Description null string DisplayName null string Inherit true bool Inherited true bool IsReadOnly false bool Name "DefaultMediaPreviewController" string Path null string Tags {string[2]} string[] TemplateType {Name = "DefaultMediaPreviewController" FullName = "EPiServer.Cms.Shell.UI.Controllers.Preview.DefaultMediaPreviewController"} System.Type {System.RuntimeType} TemplateTypeCategory MvcController EPiServer.Framework.Web.TemplateTypeCategories [5] {EPiServer.DataAbstraction.TemplateModel} EPiServer.DataAbstraction.TemplateModel AvailableWithoutTag true bool Default false bool Description null string DisplayName null string Inherit true bool Inherited true bool IsReadOnly false bool Name "ContentMediaHttpHandler" string Path null string Tags null string[] TemplateType {Name = "ContentMediaHttpHandler" FullName = "EPiServer.Web.ContentMediaHttpHandler"} System.Type {System.RuntimeType} TemplateTypeCategory HttpHandler EPiServer.Framework.Web.TemplateTypeCategories
^Please note that the second template model "Navico.B2B.Buybook.Web.Controllers.ImageFileController" is a new controller I've been testing with (and hasn't helped thus far)
And as for the e.RoutingSegmentContext.RouteData, here's the debug snapshot (I'm not sure what the most useful information in it would be so let me know if you'd like different info):
e.RoutingSegmentContext.RouteData {System.Web.Routing.RouteData} System.Web.Routing.RouteData DataTokens {System.Web.Routing.RouteValueDictionary} System.Web.Routing.RouteValueDictionary Route {EPiServer.Web.Routing.ContentRoute} System.Web.Routing.RouteBase {EPiServer.Web.Routing.ContentRoute} [EPiServer.Web.Routing.ContentRoute] {EPiServer.Web.Routing.ContentRoute} EPiServer.Web.Routing.ContentRoute base {EPiServer.Web.Routing.ContentRoute} System.Web.Routing.Route {EPiServer.Web.Routing.ContentRoute} Name "Media_Global" string StrictLanguageRoutingResolver {Method = {Boolean <MapContentRoute>b__1()}} System.Func<bool> Url '((EPiServer.Web.Routing.ContentRoute)(e.RoutingSegmentContext.RouteData.Route)).Url' threw an exception of type 'System.NotImplementedException' string {System.NotImplementedException} Static members RouteExistingFiles true bool RouteHandler {EPiServer.Web.Routing.MultiplexingRouteHandler} System.Web.Routing.IRouteHandler {EPiServer.Web.Routing.MultiplexingRouteHandler} Values {System.Web.Routing.RouteValueDictionary} System.Web.Routing.RouteValueDictionary
Interesting info, but not sure I know what to make of it - your thoughts?
Oh, and if it helps, I've just gone and done the same debugging on the Alloy site with the working routing for reference.
Here's the Template models:
models Count = 6 System.Collections.Generic.IEnumerable<EPiServer.DataAbstraction.TemplateModel> {System.Collections.ObjectModel.ReadOnlyCollection<EPiServer.DataAbstraction.TemplateModel>} [0] {EPiServer.DataAbstraction.TemplateModel} EPiServer.DataAbstraction.TemplateModel AvailableWithoutTag true bool Default false bool Description null string DisplayName null string Inherit true bool Inherited false bool IsReadOnly false bool Name "ImageFileController" string Path null string Tags null string[] TemplateType {Name = "ImageFileController" FullName = "EPiServerSite1.Controllers.ImageFileController"} System.Type {System.RuntimeType} TemplateTypeCategory MvcPartialController EPiServer.Framework.Web.TemplateTypeCategories [1] {EPiServer.DataAbstraction.TemplateModel} EPiServer.DataAbstraction.TemplateModel AvailableWithoutTag false bool Default false bool Description null string DisplayName null string Inherit true bool Inherited true bool IsReadOnly false bool Name "ImagePreviewHandler" string Path null string Tags {string[1]} string[] TemplateType {Name = "ImagePreviewHandler" FullName = "EPiServer.Cms.Shell.UI.Controllers.Preview.ImagePreviewHandler"} System.Type {System.RuntimeType} TemplateTypeCategory HttpHandler EPiServer.Framework.Web.TemplateTypeCategories [2] {EPiServer.DataAbstraction.TemplateModel} EPiServer.DataAbstraction.TemplateModel AvailableWithoutTag false bool Default false bool Description null string DisplayName null string Inherit true bool Inherited true bool IsReadOnly false bool Name "ImageEditController" string Path null string Tags {string[1]} string[] TemplateType {Name = "ImageEditController" FullName = "EPiServer.Cms.Shell.UI.Controllers.Preview.ImageEditController"} System.Type {System.RuntimeType} TemplateTypeCategory MvcController EPiServer.Framework.Web.TemplateTypeCategories [3] {EPiServer.DataAbstraction.TemplateModel} EPiServer.DataAbstraction.TemplateModel AvailableWithoutTag true bool Default false bool Description null string DisplayName null string Inherit true bool Inherited true bool IsReadOnly false bool Name "ContentMediaHttpHandler" string Path null string Tags null string[] TemplateType {Name = "ContentMediaHttpHandler" FullName = "EPiServer.Web.ContentMediaHttpHandler"} System.Type {System.RuntimeType} TemplateTypeCategory HttpHandler EPiServer.Framework.Web.TemplateTypeCategories [4] {EPiServer.DataAbstraction.TemplateModel} EPiServer.DataAbstraction.TemplateModel AvailableWithoutTag false bool Default false bool Description null string DisplayName null string Inherit true bool Inherited true bool IsReadOnly false bool Name "DefaultMediaPreviewController" string Path null string Tags {string[2]} string[] TemplateType {Name = "DefaultMediaPreviewController" FullName = "EPiServer.Cms.Shell.UI.Controllers.Preview.DefaultMediaPreviewController"} System.Type {System.RuntimeType} TemplateTypeCategory MvcController EPiServer.Framework.Web.TemplateTypeCategories [5] {EPiServer.DataAbstraction.TemplateModel} EPiServer.DataAbstraction.TemplateModel AvailableWithoutTag false bool Default false bool Description null string DisplayName null string Inherit true bool Inherited true bool IsReadOnly false bool Name "NoRendererMessage" string Path "~/Views/Shared/Blocks/NoRenderer.cshtml" string Tags {string[1]} string[] TemplateType {Name = "PartialViewRenderTemplate`1" FullName = "EPiServer.Web.Mvc.PartialViewRenderTemplate`1[[EPiServer.Core.IContentData, EPiServer, Version=8.8.0.0, Culture=neutral, PublicKeyToken=8fe83dea738b45b7]]"} System.Type {System.RuntimeType} TemplateTypeCategory MvcPartialView EPiServer.Framework.Web.TemplateTypeCategories
And here's the e.RoutingSegmentContext.RouteData (which, at least what I inspected, is identical):
e.RoutingSegmentContext.RouteData {System.Web.Routing.RouteData} System.Web.Routing.RouteData DataTokens {System.Web.Routing.RouteValueDictionary} System.Web.Routing.RouteValueDictionary Route {EPiServer.Web.Routing.ContentRoute} System.Web.Routing.RouteBase {EPiServer.Web.Routing.ContentRoute} [EPiServer.Web.Routing.ContentRoute] {EPiServer.Web.Routing.ContentRoute} EPiServer.Web.Routing.ContentRoute base {EPiServer.Web.Routing.ContentRoute} System.Web.Routing.Route {EPiServer.Web.Routing.ContentRoute} Name "Media_Global" string StrictLanguageRoutingResolver {Method = {Boolean <MapContentRoute>b__1()}} System.Func<bool> Url '((EPiServer.Web.Routing.ContentRoute)(e.RoutingSegmentContext.RouteData.Route)).Url' threw an exception of type 'System.NotImplementedException' string {System.NotImplementedException} Static members RouteExistingFiles true bool RouteHandler {EPiServer.Web.Routing.MultiplexingRouteHandler} System.Web.Routing.IRouteHandler {EPiServer.Web.Routing.MultiplexingRouteHandler} Values {System.Web.Routing.RouteValueDictionary} System.Web.Routing.RouteValueDictionary
Hope that helps so we've got something to compare to.
Hi,
Without debugger attached to the running process it's actually prety hard to diagnose in ones head :)
Anyway for now, just to get site up and running and serve image files, you could add following workaround:
[InitializableModule] [ModuleDependency(typeof(InitializationModule))] public class CustomizedRenderingInitialization : IInitializableModule { public void Initialize(InitializationEngine context) { context.Locate.TemplateResolver().TemplateResolved += OnTemplateResolved; } public void Uninitialize(InitializationEngine context) { ServiceLocator.Current.GetInstance<TemplateResolver>().TemplateResolved -= OnTemplateResolved; } }
public static void OnTemplateResolved(object sender, TemplateResolverEventArgs args) { if (args.RenderType == typeof(ImageFile) && !PageEditing.PageIsInEditMode && args.SelectedTemplate.Name == "ImagePreviewHandler) { args.SelectedTemplate = args.SupportedTemplates.First(t => t.Name == "ContentMediaHttpHandler"); } }
This is nasty hack and should not be used eventually. Proper way would be to solve issue why Preview template model is selected in your project. I speculate that this may be due to Commerce existence. But that's only my humble wild guess...
Thanks Valdis x1000 for all your advice! This hack has got it working in development for now.. I'm going to touch base with EPiServer support to see if they can assist with the deeper issue. Will report back here if I can make sense of it :)
Hello everyone,
I'm relatively new at using images in Episerver 8 (latest version) and I'm becoming totally lost in the way to set it up properly :-(. And sadly Google is not my friend at all (reading dozens of different implementations)
From what I understand is that you need to create mediatypes for the image. I did so for the type 'ImageFile' (derived from MediaData). Furthermore i created an 'imagefile.cshtml' in Shared/DisplayTemplates folder.
Now if i create a pagetype with a property of type Image it works fine. However, now comes the problems:
- If i drag an image in a contentarea it reads 'The 'ImageFile' cannot be displayed' instead of showing the image
- If i drag the image in a Richtexteditor field, the url shows, not the image
Even worse i got some common problems with images:
- The feature 'open in image editor' is always disabled in the file manager. Als there is no preview visible for the image that is uploaded
- If i select the image button in the richtexteditor it shows the folders but NONE of my uploaded images are showing??
- I work in a development-team and try to use the SQLBlobProvider to share images amongst the developers, it should work by installing nuget package but so far no success.. :-(
Although i understand the power and flexibility of being able to program this, it frustrates me that out of the box images can be so troublesome to use. I hope it's just configuration that solves my problems.
Thanks in advance for anyone helping me!