HomeDev GuideAPI Reference
Dev GuideAPI ReferenceUser GuideGitHubNuGetDev CommunityDoc feedbackLog In
GitHubNuGetDev CommunityDoc feedback


Note

Optimizely Forms is only supported by MVC-based websites and HTML5-compliant browsers.

Two built-in features, [Email Actor](🔗) and `RichTextElement`, let an editor compose a template with placeholders inside. Placeholders are replaced with an actual value from form-submitted values.

The placeholders groups are as follows:

  • **FormElements of current Form**, such as #NAME# and #EMAIL#, are field names of a form. They are replaced with actual form submission values (for example, _John Doe_ and [_[email protected]_](🔗)).

  • **Predefined placeholder**, such as #SUMMARY#, outputs the values of all fields on a form.

  • **Extra placeholder** by third-party developers (provided by custom `PlaceHolderProvider`).

You can list available placeholders in the **Insert placeholder** combobox so an editor can select a placeholder. The `EmailActor` and the `RichTextElement` has this combobox.



Note

The combobox Dojo widget has `FieldMappingTokenListViewModel;` it calls `FormsDataStore.GetAvailableReplacablePlaceHolders()` on server-side to get a list of placeholders.

## Customized placeholder API

Placeholder processing is put in `PlaceHolderService`. You can replace `PlaceHolderService` with your own implementation with Dependency Injection. By default, it activates all instances of `IPlaceHolderProvider` interface and calls `ProcessPlaceHolders()`. `PlaceHolderService` calls available `IPlaceHolderProviders` in a chain of processing, through the `IPlaceHolderProviders.Order` property. The latter provider can alter the previous provider result.

`DefaultPlaceHolderProvider` is the default implementation of `IPlaceHolderProvider`, which replaces `FormElementPlaceHolders` with an actual value and provides an extra #SUMMARY# placeholder.