Dignite.Abp.FlexFields.Web
10.7.1
dotnet add package Dignite.Abp.FlexFields.Web --version 10.7.1
NuGet\Install-Package Dignite.Abp.FlexFields.Web -Version 10.7.1
<PackageReference Include="Dignite.Abp.FlexFields.Web" Version="10.7.1" />
<PackageVersion Include="Dignite.Abp.FlexFields.Web" Version="10.7.1" />
<PackageReference Include="Dignite.Abp.FlexFields.Web" />
paket add Dignite.Abp.FlexFields.Web --version 10.7.1
#r "nuget: Dignite.Abp.FlexFields.Web, 10.7.1"
#:package Dignite.Abp.FlexFields.Web@10.7.1
#addin nuget:?package=Dignite.Abp.FlexFields.Web&version=10.7.1
#tool nuget:?package=Dignite.Abp.FlexFields.Web&version=10.7.1
Dignite.Abp.FlexFields
Part of dignite-projects/abp-modules — see the repository README for the other modules, and CONTRIBUTING.md for the build, versioning, and release process shared across them.
A constraint kernel for adding flexible, per-instance fields (EAV) to any host entity in an
ABP Framework solution — modeled on ABP's own Volo.Abp.Users: contracts,
generics, and mechanism only, no field or host model of its own. Every downstream (a CMS, a commerce
catalog, …) owns its own field-definition entity, host entity, and database table; the kernel never
defines "the concrete one."
- A self-built value bag, not
ExtraProperties.IHasFlexFields.FlexFieldsis FlexFields' own dictionary, isolated from ABP's sharedExtraPropertiesbag by design (seedev-docs/flexfields-design.md§4). - One seam in, one seam out. A downstream implements
IFlexFieldProvider<TEntity>to tell the kernel what fields a host entity has; the kernel gives back validation (IFlexFieldValidator<TEntity>), a query pushdown (IFlexFieldQueryExecutor<TEntity>), derived-index maintenance (IFlexFieldIndexManager<TEntity>), and value-bag key migration for renamed or deleted field definitions (IFlexFieldValueMigrator<TEntity>). - Provider-agnostic by design. The relational pivot-table shape (
FlexFieldIndexValue,EfCoreFlexFieldIndexManagerBase, …) lives only inDignite.Abp.FlexFields.EntityFrameworkCore; the MongoDB provider has no equivalent type and queries the value bag directly.
.NET 10 · ABP 10.7 · LGPL-3.0-only
Documentation
Read the documentation — getting started with EF Core, the eight built-in field types and their configuration keys, creating a field type, querying by field values, renaming and deleting fields, MongoDB, the Angular and MVC UIs, and the CKEditor field type.
Packages
| Package | Purpose |
|---|---|
Dignite.Abp.FlexFields.Abstractions |
DDD-free contracts and vocabulary: the value bag, FlexFieldValue, IFieldType + the eight built-in field types (Text/Number/DateTime/Select/Boolean/Tree, plus the composite Matrix/Table), the query vocabulary, and the field-lifecycle Etos. |
Dignite.Abp.FlexFields.Domain.Shared |
Shared constants (FlexFieldConsts). |
Dignite.Abp.FlexFields.Domain |
The Entity contract (IFlexField) and the DDD-aware seams, with the default validator and value migrator. |
Dignite.Abp.FlexFields.EntityFrameworkCore |
Model-builder extensions, the typed pivot-row shape (FlexFieldIndexValue), and base classes for the index manager, query executor, and field repository. Ships no DbContext and no table. |
Dignite.Abp.FlexFields.MongoDB |
Queries and indexes the value bag in place; no counterpart to FlexFieldIndexValue. |
Dignite.Abp.FlexFields.Web |
<flex-field-view> / <flex-field-search> tag helpers for MVC / Razor Pages. |
Dignite.Abp.FlexFields.CKEditor / .CKEditor.Web |
Optional rich-text field type, and its MVC view. |
@dignite/ng.flex-fields (npm) |
Angular config / control / view / search components for every built-in field type. |
@dignite/ng.flex-fields-ckeditor (npm) |
Optional Angular half of the CKEditor field type. |
Quick start
dotnet add path/to/MyProject.Domain.csproj package Dignite.Abp.FlexFields.Domain
dotnet add path/to/MyProject.EntityFrameworkCore.csproj package Dignite.Abp.FlexFields.EntityFrameworkCore
public class ProductField : AggregateRoot<Guid>, IFlexField { /* Name, DisplayName, FieldTypeName, Configuration, ... */ }
public class Product : AggregateRoot<Guid>, IHasFlexFields
{
public virtual FlexFieldDictionary FlexFields { get; set; } = new();
}
public class ProductFlexFieldProvider : IFlexFieldProvider<Product>, ITransientDependency
{
// Merge this host's field definitions + per-usage Required/Searchable + entity.FlexFields
// into FlexFieldValue instances - the kernel's only way to learn what fields Product has.
}
The documentation's Getting Started wires the database mapping, the index manager, the query executor and the save path.
Development
dotnet build Dignite.Abp.FlexFields.slnx # src/ + test/ + demo/
dotnet test Dignite.Abp.FlexFields.slnx
dotnet run --project demo/Dignite.Abp.FlexFields.Demo -- --migrate-database # first run only
dotnet run --project demo/Dignite.Abp.FlexFields.Demo # https://localhost:44330
cd angular && npm install --legacy-peer-deps && npm run build:lib && npm start # http://localhost:4200
demo/ wires the kernel to a real Product / ProductField feature with an Angular and an MVC UI and seeded data;
it is local-dev only and never packed. --legacy-peer-deps is required: @abp/ng.theme.shared 10.7.0 still depends
on @swimlane/ngx-datatable ~22.0.0, whose Angular peer range stops at 20. The design rationale, including what was
rejected and why, is in dev-docs/flexfields-design.md.
License
Licensed under LGPL-3.0-only.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Dignite.Abp.FlexFields.Abstractions (>= 10.7.1)
- Microsoft.Extensions.FileProviders.Embedded (>= 10.0.12)
- Microsoft.Extensions.Hosting.Abstractions (>= 10.0.13)
- Volo.Abp.AspNetCore (>= 10.7.0)
- Volo.Abp.AspNetCore.Mvc (>= 10.7.0)
- Volo.Abp.AspNetCore.Mvc.UI (>= 10.7.0)
- Volo.Abp.Authorization (>= 10.7.0)
- Volo.Abp.Authorization.Abstractions (>= 10.7.0)
- Volo.Abp.BackgroundWorkers (>= 10.7.0)
- Volo.Abp.Core (>= 10.7.0)
- Volo.Abp.Ddd.Application (>= 10.7.0)
- Volo.Abp.Ddd.Application.Contracts (>= 10.7.0)
- Volo.Abp.Ddd.Domain (>= 10.7.0)
- Volo.Abp.DistributedLocking.Abstractions (>= 10.7.0)
- Volo.Abp.EventBus (>= 10.7.0)
- Volo.Abp.EventBus.Abstractions (>= 10.7.0)
- Volo.Abp.Features (>= 10.7.0)
- Volo.Abp.Guids (>= 10.7.0)
- Volo.Abp.Json.SystemTextJson (>= 10.7.0)
- Volo.Abp.Localization (>= 10.7.0)
- Volo.Abp.MultiTenancy.Abstractions (>= 10.7.0)
- Volo.Abp.Timing (>= 10.7.0)
- Volo.Abp.Validation (>= 10.7.0)
- Volo.Abp.VirtualFileSystem (>= 10.7.0)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on Dignite.Abp.FlexFields.Web:
| Package | Downloads |
|---|---|
|
Dignite.Abp.FlexFields.CKEditor.Web
Default <flex-field-view> rendering (Dignite.Abp.FlexFields.Web) for the CKEditor bolt-on field type: converts a Markdown-format value to HTML (Markdig, GFM-compatible pipeline) and sanitizes the result (HtmlSanitizer) before rendering - see AbpFlexFieldsCKEditorWebModule for the sanitizer/pipeline setup. No search partial: CKEditorFieldType.IndexValueType is null, so there is nothing to search on. |
|
|
Dignite.Abp.FlexFields.FileExplorer.Web
Default <flex-field-view> rendering (Dignite.Abp.FlexFields.Web) for the FileExplorer bolt-on field type: file name, size, MIME type and a link, read straight out of the value the Angular picker already denormalized at pick time (id/containerName/blobName/name/mimeType/size/url - see FileExplorerFieldType's own doc comment). Zero IO and zero reference to Dignite.FileExplorer, the same boundary the field type itself keeps - the stored value already carries everything this view needs. No search partial: FileExplorerFieldType.IndexValueType is null, so there is nothing to search on. |
|
|
Dignite.Site.Public.Web
Package Description |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 10.7.1 | 126 | 10/29/2026 |
| 10.7.0 | 149 | 10/15/2026 |
| 10.0.0-rc.29 | 78 | 10/12/2026 |
| 10.0.0-rc.28 | 65 | 10/12/2026 |
| 10.0.0-rc.27 | 67 | 10/10/2026 |
| 10.0.0-rc.26 | 60 | 10/10/2026 |
| 10.0.0-rc.25 | 70 | 10/10/2026 |
| 10.0.0-rc.24 | 70 | 10/9/2026 |
| 10.0.0-rc.23 | 66 | 10/9/2026 |
| 10.0.0-rc.22 | 67 | 10/9/2026 |
| 10.0.0-rc.21 | 67 | 10/7/2026 |
| 10.0.0-rc.20 | 72 | 10/7/2026 |
| 10.0.0-rc.19 | 76 | 10/4/2026 |
| 10.0.0-rc.18 | 75 | 10/4/2026 |
| 10.0.0-rc.17 | 96 | 9/23/2026 |
| 10.0.0-rc.16 | 102 | 9/6/2026 |
| 10.0.0-rc.15 | 104 | 9/5/2026 |
| 10.0.0-rc.14 | 92 | 9/4/2026 |
| 10.0.0-rc.13 | 93 | 9/3/2026 |
| 10.0.0-rc.11 | 95 | 8/30/2026 |