Take the community feedback survey now.
Take the community feedback survey now.
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!