OrchardCMS/OrchardCore · error · ArgumentException
The type must implement IContentFieldDisplayDriver
Error message
The type must implement IContentFieldDisplayDriver
What it means
ContentDisplayOptions.ForContentFieldDisplayMode registers a display-mode driver for a content field and requires the driver type to implement IContentFieldDisplayDriver. Field display modes are driven exclusively by field display drivers, so passing any other driver kind is rejected.
Solutions
- Pass the driver class that implements IContentFieldDisplayDriver
- If the driver is a part driver, use ForContentPartDisplayMode instead
- Check the driver's base class / implemented interfaces before registering
Example fix
// before options.ForContentFieldDisplayMode(typeof(TextField), typeof(ProductPartDisplayDriver), d => d == "Detail"); // after options.ForContentFieldDisplayMode(typeof(TextField), typeof(TextFieldDisplayDriver), d => d == "Detail");
Defensive patterns
Strategy: type-guard
Validate before calling
if (!typeof(IContentFieldDisplayDriver).IsAssignableFrom(driverType))
throw new ArgumentException($"{driverType.Name} is not an IContentFieldDisplayDriver."); Type guard
static bool IsFieldDisplayDriver(Type t) => typeof(IContentFieldDisplayDriver).IsAssignableFrom(t);
Try / catch
try
{
options.ForContentFieldDisplayMode(fieldType, driverType, predicate);
}
catch (ArgumentException ex) when (ex.Message.Contains(nameof(IContentFieldDisplayDriver)))
{
_logger.LogError(ex, "{Type} is not an IContentFieldDisplayDriver", driverType.Name);
} Prevention
- Confirm the driver derives from ContentFieldDisplayDriver before field-mode registration
- When adapting part placement code to fields, change both the type AND the driver, not just the type
- Prefer generic/typed registration helpers that encode the driver kind in the signature
When it happens
Trigger: Calling ForContentFieldDisplayMode(fieldType, driverType, predicate) with a ContentPartDisplayDriver or other non-field driver type
Common situations: Copy-pasted part registration code adapted to a field where only the part type was changed; refactored driver that changed base class from field to part driver
Understand the failure class
Background: Type mismatch errors: IllegalArgumentException, TypeError and type guards across 150 open-source libraries — this error's family across 150 libraries.
Related errors
- The type must implement IContentPartDisplayDriver
- The type must inherit from ContentPart
- The type must inherit from ContentField
- Content field name must start with a letter
- Content field name contains invalid characters
AI-assisted analysis of OrchardCMS/OrchardCore@4306c0717f (2026-09-13).
Data as JSON: /api/errors/8d0b777d4d375028.
Report an issue: GitHub.
Appendix: source
Thrown at src/OrchardCore/OrchardCore.ContentManagement.Display/ContentDisplay/ContentDisplayOptions.cs:73
{
throw new ArgumentException("The type must inherit from " + nameof(ContentPart));
}
var option = _contentParts.FirstOrDefault(x => x.Type == contentPartType);
if (option == null)
{
option = new ContentPartDisplayOption(contentPartType);
_contentParts.Add(option);
}
return option;
}
internal void ForContentFieldDisplayMode(Type contentFieldType, Type displayModeDriverType, Func<string, bool> predicate)
{
if (!typeof(IContentFieldDisplayDriver).IsAssignableFrom(displayModeDriverType))
{
throw new ArgumentException("The type must implement " + nameof(IContentFieldDisplayDriver));
}
var option = GetOrAddContentFieldDisplayOption(contentFieldType);
option.ForDisplayMode(displayModeDriverType, predicate);
}
internal void ForContentFieldEditor(Type contentFieldType, Type editorDriverType, Func<string, bool> predicate)
{
if (!typeof(IContentFieldDisplayDriver).IsAssignableFrom(editorDriverType))
{
throw new ArgumentException("The type must implement " + nameof(IContentFieldDisplayDriver));
}
var option = GetOrAddContentFieldDisplayOption(contentFieldType);
option.ForEditor(editorDriverType, predicate);
}
internal void RemoveContentFieldDisplayDriver(Type contentPartType, Type driverType)View on GitHub (pinned to 4306c0717f)