Unfortunately, to display property's value with dynamic content replaced with our controls it's required to use EPiServer's control:
1: <EPiServer:Property PropertyName="MainBody" runat="server" />
Different approaches won't work.
1: <%= CurrentPage["MainBody"] %>
2: <%= CurrentPage.Property["MainBody"] %>
3: litMainBody.Text = CurrentPage.Property["MainBody"].ToWebString()

It is a considerable drawback as there are cases in which it's required to do something with property's value before displaying it:
- For example you may want to alter all links by adding some extra parameters
- When using Model-View-Presenter (flavor of MVC) you want to pass only pure data to the view.
It was worth spending some time to find a workaround. In the end, solution turned out to be not so convoluted, here is a control which takes a string and displays it replacing any dynamic content with corresponding controls.
1: public partial class DynamicContent : UserControlBase
2: {3: public string StringToDisplay
4: { 5: set 6: {7: var propertyControl = new PropertyLongStringControl
8: { 9: Page = Page,10: PropertyData = new PropertyXhtmlString(value)
11: }; 12: Controls.Add(propertyControl); 13: } 14: } 15: }And the usage is really straightforward:
1: <unit:DynamicContent runat="server" id="dcMainBody" />
2:
3: dcMainBody.StringToDisplay = CurrentPage.Property["MainBody"].ToWebString();
Before calling dcMainBody.StringToDisplay you can of course change property's value in any arbitrary way.
Hope it will save someone a bit of time :)
Hope it will save someone a bit of time :)

1 comment:
It seems we ran into these problems at almost the same time! :) I posted another workaround here.
Post a Comment