C# Archive

Getting the root PageReference of the imported pages in Episerver

In our work to automate export and import of the production database into our test environment we had to maintain a test node in the Episerver page tree. This ment that we had to export it before replacing the database, and then import it again. Please see Exporting Episerver content programmatically through an ApiController and Importing Episerver content programmatically through an ApiController for information about …

Importing Episerver content programmatically through an ApiController

Importing the test node package that we exported earlier (see article Exporting Episerver content programmatically through an ApiController) would be the next step in our automated transfer of the production database to the testing environment. I extended our ApiController with an import endpoint for this purpose. Note that this code is never intended to be deployed to production. Importing is easier than exporting. The relevant …

Exporting Episerver content programmatically through an ApiController

As part of the automated transfer of the production database to the testing environment for my current client we found the need to maintain a node in the Episerver page tree that is used for testing. I extended our ApiController with an export endpoint for this purpose. Note that this code is never intended to be deployed to production. So the interesting part happens in …

Tracing between logs with a correlation ID

Attempting to match timestamps and whatnot to correlate requests over various logs may be quite tedious. Adding a correlation ID to your website makes this easier and may save you quite a bit of time. This is what we did at my current client for all of their Episerver websites. I Implemented this together with my collegue Svante Seleborg. Passing a correlation ID through your …

Different subsets of content types in different EPiServer multi sites with all types in one assembly

As I explained in my previous article Different subsets of properties in different EPiServer multi sites using same content type model my current client is building a common platform for 7 websites spread over 3 EPiServer installations. As the platform grew the need for restructuring grew as well. It was no longer viable to keep all content types in separate assemblies in order to add …

Different subsets of properties in different EPiServer multi sites using same content type model

For my current client we are building 7 websites spread over (at least) 3 EPiServer multi site installations. Rather than seeing each of them as separate entities, they all consume the same base code from a common platform (such as infrastructure, EPiServer content types, and so on). An issue that you’re facing when using the same block or page type on several EPiServer installations is …

EPiServer TinyMCE 3 Wrapping selection in unsupported aside tag

For my current client, we had a need to allow EPiServer editors to wrap XHtmlSting field content in aside tags in a user friendly manner. The first most obvious thought went to the styles drop down list and EPiServer’s editor.css file, however after a few tries and a bit of Ilspy‘ing I realized that the aside tag element is not supported by the current implementation. …

Assemblies not copied nor cleaned, and Visual Studio CS0006 Error when building

We were installing EPiServer Forms in a client’s EPiServer 9 website the other day, and encountered an issue with the binarier not being copied from the NuGet packages directory to the website’s bin folder. If we manually copied them there manually and then ran a Clean in Visual Studio, the EPiServer Forms assemblies would not be removed either. Also, if we tried adding references to …

Changing NLog minLevel LogLevel at runtime in EPiServer

We moved from log4net to NLog in my current client’s EPiServer 8.5 website last year (see Using NLog with EPiServer and log4net for more information). Some time ago we received a request about being able to alter the log level at runtime, without editing configuration files on the servers. Reasonable enough; we already had read access to the generated logs, but no way of temporarily …

Database persisted translations with edit tools for language file resources in globalized EPiServer websites

A few years back I wrote a small tool allowing web administrators to update EPiServer CMS 6 R2 language files by themselves without the help of their website developers. There were of course a few downsides to this, such as updated deployment procedures as not to lose any new translations. I took a few hours and made a new one for EPiServer 7.5 that works …

Sitemap.xml generator engine for Multi language EPiServer 7.5 websites

A sitemap.xml file is a useful tool for helping search engines to find relevant pages on your website. This sitemap generator engine for EPiServer is based on loose strategies supporting globalized multilingual content; in other words, mysite.se/sitemap.xml and mysite.no/sitemap.xml will return swedish and norwegian URLs respectively. The strategy based pattern allows for easy custom additions of any kind to the xml file; for instance, apart …

Custom property Checkbox wrapper as Dynamic Property in EPiServer 7.5

We needed to add a checkbox as a dynamic property in my current client’s EPiServer 7.5 site last week. It’s not as straight forward as one might think due to the way that dynamic properties are handled. If you add a dynamic checkbox property through admin mode, together with a property decorated with the attribute in your code, everything will work fine up until …

Rewrite URL before ValidateInputIfRequiredByConfig throws ‘A potentially dangerous Request.Path value was detected from the client (&).’ exception

A client are on their way to migrate a large website from an old platform to a brand new EPiServer 7.5 site running on an IIS webserver. We created a small redirection engine to handle all incoming legacy URLs redirecting them to the proper pages on the new website, so as not to lose search engine ranking, visitor bookmarks and so on. However, the legacy …

Adding items to EPiServer’s global menu in edit/admin mode

We needed to create a custom toolbox in EPiServer‘s edit mode as a central place of keeping additional functionality for a client’s 7.5 website. The global menu seemed like an excellent place to do this. For a brief description on how to get EPiServer’s global menu on your own pages see this previous article. Here is a short note on how it can be done; …

ContentLink ArgumentNullException while saving AccessControlList on EPiServer page created programmatically

I received a disturbing ArgumentNullException today while removing read access for the Everyone role on new pages created in codebehind. Not really difficult once you figure it out, but I thought I’d provide an example to show how it may be done. EPiServer ContentLink value cannot be null calling ACL.Save method At first glance it may seem as it is a good idea to take …

Notes about default property values in EPiServer 7.5

I needed to set default values for a couple of my EPiServer 7.5 block and page properties today, and found Per Mange Skuseth‘s article on Attribute-based default values. I really like Per’s way of dealing with them, as you get to have each default value in connection with the property that it will affect, rather than stoving them away in some obscure method override chunk …

EPiServer 7.5 throwing System.Data.SqlClient.SqlException (0x80131904): editSaveContentVersionData: The WorkContentId dosen´t exist (WorkContentID=0)

A short note on another EPiServer exception that I encountered today while trying to save a newly created EPiServer page programmatically from codebehind. The reason for it is rather self explaining looking back at it. It’s not possible to force the current version as it does not exist yet, Doh.. So just finding myself content with only doing what is neccessary fixed the problem right …

An alternate way of managing your tabs in EPiServer 7.5; adding and changing

I needed to add a few extra tabs to our EPiServer 7.5 installation last week, and found Per Magne Skuseth‘s comment on Tabs and sort index to be really useful. Of course I managed to alter the piece of code beyond recognition while integrating it into my current project’s architecture. Here is a StructureMap twist on adding and changing tabs. Easy way of adding and …

Using NLog with EPiServer and log4net

In my current EPiServer project we decided to use NLog for our logging needs rather than going with log4net. Since EPiServer has a dependency on the latter we wanted a way of bridging EPiServer’s log messages to our own NLog setup. This was accomplished by creating a new appender for log4net, redirecting all relevant log messages to it and converting them into something that NLog …