From 7d5871a3abcf73609d356d8dfbf9c9e3c5e5d700 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 12 Aug 2019 14:13:23 +0800 Subject: [PATCH 1/6] fix #1615 Add a prefix to AutoMap*Attribute. --- docs/en/Application-Services.md | 8 ++++---- docs/zh-Hans/Application-Services.md | 8 ++++---- .../{AutoMapAttribute.cs => AbpAutoMapAttribute.cs} | 4 ++-- ...AutoMapAttributeBase.cs => AbpAutoMapAttributeBase.cs} | 4 ++-- ...AutoMapFromAttribute.cs => AbpAutoMapFromAttribute.cs} | 6 +++--- .../{AutoMapToAttribute.cs => AbpAutoMapToAttribute.cs} | 6 +++--- .../Volo/Abp/AutoMapper/AbpAutoMapperModule.cs | 6 +++--- .../Abp/AutoMapper/AutoMapperConfigurationExtensions.cs | 2 +- .../Volo/Abp/AutoMapper/AutoMapper_Inheritance_Tests.cs | 6 +++--- .../Volo/Abp/AutoMapper/AutoMapping_Tests.cs | 4 ++-- .../Volo/Abp/AutoMapper/SampleClasses/MyEntityDto.cs | 2 +- .../Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/Person.cs | 2 +- 12 files changed, 29 insertions(+), 29 deletions(-) rename framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/{AutoMapAttribute.cs => AbpAutoMapAttribute.cs} (83%) rename framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/{AutoMapAttributeBase.cs => AbpAutoMapAttributeBase.cs} (68%) rename framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/{AutoMapFromAttribute.cs => AbpAutoMapFromAttribute.cs} (75%) rename framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/{AutoMapToAttribute.cs => AbpAutoMapToAttribute.cs} (76%) diff --git a/docs/en/Application-Services.md b/docs/en/Application-Services.md index de9fc1f0df..bed14370f5 100644 --- a/docs/en/Application-Services.md +++ b/docs/en/Application-Services.md @@ -146,7 +146,7 @@ public interface IBookAppService : IApplicationService `BookDto` is a simple [DTO](Data-Transfer-Objects.md) class defined as below: ````csharp -[AutoMapFrom(typeof(Book))] //Defines the mapping +[AbpAutoMapFrom(typeof(Book))] //Defines the mapping public class BookDto { public Guid Id { get; set; } @@ -159,7 +159,7 @@ public class BookDto } ```` -* `BookDto` defines `[AutoMapFrom(typeof(Book))]` attribute to create the object mapping from `Book` to `BookDto`. +* `BookDto` defines `[AbpAutoMapFrom(typeof(Book))]` attribute to create the object mapping from `Book` to `BookDto`. Then you can implement the `GetAsync` method as shown below: @@ -248,7 +248,7 @@ public interface IAsyncCrudAppService< DTO classes used in this example are `BookDto` and `CreateUpdateBookDto`: ````csharp -[AutoMapFrom(typeof(Book))] +[AbpAutoMapFrom(typeof(Book))] public class BookDto : AuditedEntityDto { public string Name { get; set; } @@ -258,7 +258,7 @@ public class BookDto : AuditedEntityDto public float Price { get; set; } } -[AutoMapTo(typeof(Book))] +[AbpAutoMapTo(typeof(Book))] public class CreateUpdateBookDto { [Required] diff --git a/docs/zh-Hans/Application-Services.md b/docs/zh-Hans/Application-Services.md index e98e945405..74718eb571 100644 --- a/docs/zh-Hans/Application-Services.md +++ b/docs/zh-Hans/Application-Services.md @@ -146,7 +146,7 @@ public interface IBookAppService : IApplicationService `BookDto`是一个简单的[DTO](Data-Transfer-Objects.md)类, 定义如下: ````csharp -[AutoMapFrom(typeof(Book))] //Defines the mapping +[AbpAutoMapFrom(typeof(Book))] //Defines the mapping public class BookDto { public Guid Id { get; set; } @@ -159,7 +159,7 @@ public class BookDto } ```` -* `BookDto`定义了`[AutoMapFrom(typeof(Book))]`属性来从创建对象映射Book到BookDto. +* `BookDto`定义了`[AbpAutoMapFrom(typeof(Book))]`属性来从创建对象映射Book到BookDto. 然后你可以实现`GetAsync`方法. 如下所示: @@ -247,7 +247,7 @@ public interface IAsyncCrudAppService< 示例中使用的DTO类是`BookDto`和`CreateUpdateBookDto`: ````csharp -[AutoMapFrom(typeof(Book))] +[AbpAutoMapFrom(typeof(Book))] public class BookDto : AuditedEntityDto { public string Name { get; set; } @@ -257,7 +257,7 @@ public class BookDto : AuditedEntityDto public float Price { get; set; } } -[AutoMapTo(typeof(Book))] +[AbpAutoMapTo(typeof(Book))] public class CreateUpdateBookDto { [Required] diff --git a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AutoMapAttribute.cs b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapAttribute.cs similarity index 83% rename from framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AutoMapAttribute.cs rename to framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapAttribute.cs index e0fcf06d05..43004fc9f4 100644 --- a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AutoMapAttribute.cs +++ b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapAttribute.cs @@ -4,9 +4,9 @@ using AutoMapper; namespace Volo.Abp.AutoMapper { - public class AutoMapAttribute : AutoMapAttributeBase + public class AbpAutoMapAttribute : AbpAutoMapAttributeBase { - public AutoMapAttribute(params Type[] targetTypes) + public AbpAutoMapAttribute(params Type[] targetTypes) : base(targetTypes) { diff --git a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AutoMapAttributeBase.cs b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapAttributeBase.cs similarity index 68% rename from framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AutoMapAttributeBase.cs rename to framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapAttributeBase.cs index 5756347380..75743e6186 100644 --- a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AutoMapAttributeBase.cs +++ b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapAttributeBase.cs @@ -3,11 +3,11 @@ using AutoMapper; namespace Volo.Abp.AutoMapper { - public abstract class AutoMapAttributeBase : Attribute + public abstract class AbpAutoMapAttributeBase : Attribute { public Type[] TargetTypes { get; } - protected AutoMapAttributeBase(params Type[] targetTypes) + protected AbpAutoMapAttributeBase(params Type[] targetTypes) { TargetTypes = targetTypes; } diff --git a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AutoMapFromAttribute.cs b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapFromAttribute.cs similarity index 75% rename from framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AutoMapFromAttribute.cs rename to framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapFromAttribute.cs index 5e767273e1..4aca433dfa 100644 --- a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AutoMapFromAttribute.cs +++ b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapFromAttribute.cs @@ -4,17 +4,17 @@ using AutoMapper; namespace Volo.Abp.AutoMapper { - public class AutoMapFromAttribute : AutoMapAttributeBase + public class AbpAutoMapFromAttribute : AbpAutoMapAttributeBase { public MemberList MemberList { get; set; } = MemberList.Destination; - public AutoMapFromAttribute(params Type[] targetTypes) + public AbpAutoMapFromAttribute(params Type[] targetTypes) : base(targetTypes) { } - public AutoMapFromAttribute(MemberList memberList, params Type[] targetTypes) + public AbpAutoMapFromAttribute(MemberList memberList, params Type[] targetTypes) : this(targetTypes) { MemberList = memberList; diff --git a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AutoMapToAttribute.cs b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapToAttribute.cs similarity index 76% rename from framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AutoMapToAttribute.cs rename to framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapToAttribute.cs index 9b42fd4f46..bee84eb950 100644 --- a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AutoMapToAttribute.cs +++ b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapToAttribute.cs @@ -4,17 +4,17 @@ using AutoMapper; namespace Volo.Abp.AutoMapper { - public class AutoMapToAttribute : AutoMapAttributeBase + public class AbpAutoMapToAttribute : AbpAutoMapAttributeBase { public MemberList MemberList { get; set; } = MemberList.Source; - public AutoMapToAttribute(params Type[] targetTypes) + public AbpAutoMapToAttribute(params Type[] targetTypes) : base(targetTypes) { } - public AutoMapToAttribute(MemberList memberList, params Type[] targetTypes) + public AbpAutoMapToAttribute(MemberList memberList, params Type[] targetTypes) : this(targetTypes) { MemberList = memberList; diff --git a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs index 152e4f9283..e02ec8f85e 100644 --- a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs +++ b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs @@ -70,9 +70,9 @@ namespace Volo.Abp.AutoMapper var types = typeFinder.Types.Where(type => { var typeInfo = type.GetTypeInfo(); - return typeInfo.IsDefined(typeof(AutoMapAttribute)) || - typeInfo.IsDefined(typeof(AutoMapFromAttribute)) || - typeInfo.IsDefined(typeof(AutoMapToAttribute)); + return typeInfo.IsDefined(typeof(AbpAutoMapAttribute)) || + typeInfo.IsDefined(typeof(AbpAutoMapFromAttribute)) || + typeInfo.IsDefined(typeof(AbpAutoMapToAttribute)); } ).ToArray(); diff --git a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AutoMapperConfigurationExtensions.cs b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AutoMapperConfigurationExtensions.cs index 579e5181d1..6c4ca0326d 100644 --- a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AutoMapperConfigurationExtensions.cs +++ b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AutoMapperConfigurationExtensions.cs @@ -8,7 +8,7 @@ namespace Volo.Abp.AutoMapper { public static void CreateAutoAttributeMaps(this IMapperConfigurationExpression configuration, Type type) { - foreach (var autoMapAttribute in type.GetTypeInfo().GetCustomAttributes()) + foreach (var autoMapAttribute in type.GetTypeInfo().GetCustomAttributes()) { autoMapAttribute.CreateMap(configuration, type); } diff --git a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_Inheritance_Tests.cs b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_Inheritance_Tests.cs index 8d010d829f..16ad687858 100644 --- a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_Inheritance_Tests.cs +++ b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_Inheritance_Tests.cs @@ -38,7 +38,7 @@ namespace Volo.Abp.AutoMapper } - [AutoMapFrom(typeof(MyBaseClass))] + [AbpAutoMapFrom(typeof(MyBaseClass))] public class MyTargetClassToMap { public string Value { get; set; } @@ -63,13 +63,13 @@ namespace Volo.Abp.AutoMapper private class EntityProxy : DerivedEntity { } - [AutoMapFrom(typeof(Entity))] + [AbpAutoMapFrom(typeof(Entity))] private class EntityDto { public string Value { get; set; } } - [AutoMapFrom(typeof(DerivedEntity))] + [AbpAutoMapFrom(typeof(DerivedEntity))] private class DerivedEntityDto : EntityDto { } } } diff --git a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapping_Tests.cs b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapping_Tests.cs index 58839b30b6..69f6aec506 100644 --- a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapping_Tests.cs +++ b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapping_Tests.cs @@ -128,7 +128,7 @@ namespace Volo.Abp.AutoMapper obj2.NullableValue.ShouldBe(42); } - [AutoMap(typeof(MyClass2), typeof(MyClass3))] + [AbpAutoMap(typeof(MyClass2), typeof(MyClass3))] private class MyClass1 { public string TestProp { get; set; } @@ -136,7 +136,7 @@ namespace Volo.Abp.AutoMapper public long? NullableValue { get; set; } } - [AutoMapTo(typeof(MyClass3))] + [AbpAutoMapTo(typeof(MyClass3))] private class MyClass2 { public string TestProp { get; set; } diff --git a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/SampleClasses/MyEntityDto.cs b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/SampleClasses/MyEntityDto.cs index 68b57144db..df2d4aeebe 100644 --- a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/SampleClasses/MyEntityDto.cs +++ b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/SampleClasses/MyEntityDto.cs @@ -2,7 +2,7 @@ namespace Volo.Abp.AutoMapper.SampleClasses { - [AutoMap(typeof(MyEntity))] + [AbpAutoMap(typeof(MyEntity))] public class MyEntityDto { public Guid Id { get; set; } diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/Person.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/Person.cs index 8235225def..c9c7090d1d 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/Person.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/Person.cs @@ -6,7 +6,7 @@ using Volo.Abp.MultiTenancy; namespace Volo.Abp.TestApp.Domain { - [AutoMapTo(typeof(PersonEto))] + [AbpAutoMapTo(typeof(PersonEto))] public class Person : FullAuditedAggregateRoot, IMultiTenant { public virtual Guid? TenantId { get; set; } From 5c4a8dd08f7396f47b4defca5e2dd5755d815aec Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 28 Aug 2019 17:36:02 +0800 Subject: [PATCH 2/6] Resolve #1687 Dapper integration documentation. --- docs/en/Dapper.md | 61 +++++++++++++++++++++++++++ docs/en/docs-nav.json | 4 ++ docs/zh-Hans/Dapper.md | 61 +++++++++++++++++++++++++++ docs/zh-Hans/Entity-Framework-Core.md | 2 +- docs/zh-Hans/docs-nav.json | 4 ++ 5 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 docs/en/Dapper.md create mode 100644 docs/zh-Hans/Dapper.md diff --git a/docs/en/Dapper.md b/docs/en/Dapper.md new file mode 100644 index 0000000000..d8b17838eb --- /dev/null +++ b/docs/en/Dapper.md @@ -0,0 +1,61 @@ +# Dapper Integration + +Because Dapper's idea is that the sql statement takes precedence, and mainly provides some extension methods for the `IDbConnection` interface. + +Abp does not encapsulate too many functions for Dapper. Abp Dapper provides a `DapperRepository` base class based on Abp EntityFrameworkCore, which provides the `IDbConnection` and `IDbTransaction` properties required by Dapper. + +These two properties can work well with [Unit-Of-Work](Unit-Of-Work.md). + +## Installation + +Please install and configure EF Core according to [EF Core's integrated documentation](Entity-Framework-Core.md). + +`Volo.Abp.Dapper` is the main nuget package for the Dapper integration. Install it to your project (for a layered application, to your data/infrastructure layer): + +```shell +Install-Package Volo.Abp.Dapper +``` + +Then add `AbpDapperModule` module dependency (`DependsOn` attribute) to your [module](Module-Development-Basics.md): + +````C# +using Volo.Abp.Dapper; +using Volo.Abp.Modularity; + +namespace MyCompany.MyProject +{ + [DependsOn(typeof(AbpDapperModule))] + public class MyModule : AbpModule + { + //... + } +} +```` + +## Implement Dapper Repository + +The following code implements the `Person` repository, which requires EF Core's `DbContext` (MyAppDbContext). You can inject `PersonDapperRepository` to call its methods. + +`DbConnection` and `DbTransaction` are from the `DapperRepository` base class. + +```C# +public class PersonDapperRepository : DapperRepository, ITransientDependency +{ + public PersonDapperRepository(IDbContextProvider dbContextProvider) + : base(dbContextProvider) + { + } + + public virtual async Task> GetAllPersonNames() + { + return (await DbConnection.QueryAsync("select Name from People", transaction: DbTransaction)) + .ToList(); + } + + public virtual async Task UpdatePersonNames(string name) + { + return await DbConnection.ExecuteAsync("update People set Name = @NewName", new { NewName = name }, + DbTransaction); + } +} +``` diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 6773c81079..85c58cd3f1 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -250,6 +250,10 @@ { "text": "MongoDB Integration", "path": "MongoDB.md" + }, + { + "text": "Dapper Integration", + "path": "Dapper.md" } ] }, diff --git a/docs/zh-Hans/Dapper.md b/docs/zh-Hans/Dapper.md new file mode 100644 index 0000000000..60289abd00 --- /dev/null +++ b/docs/zh-Hans/Dapper.md @@ -0,0 +1,61 @@ +# Dapper 集成 + +由于Dapper的思想是sql语句优先, 且主要为`IDbConnection`接口提供了一些扩展方法. + +Abp并没有为Dapper封装太多功能. Abp Dapper在Abp EntityFrameworkCore的基础上提供了`DapperRepository`基类, 在其中提供了Dapper需要的`IDbConnection`和`IDbTransaction`属性. + +这两个属性可以和[工作单元](Unit-Of-Work.md)很好的配合. + +## 安装 + +请先根据[EF Core的集成文档](Entity-Framework-Core.md)安装并配置好EF Core. + +`Volo.Abp.Dapper`是Dapper集成的主要nuget包. 将其安装到你的项目中(在分层应用程序中适用于 数据访问/基础设施层): + +```shell +Install-Package Volo.Abp.Dapper +``` + +然后添加 `AbpDapperModule` 模块依赖项(`DependsOn` Attribute) 到 [module](Module-Development-Basics.cn.md)(项目中的Mudole类): + +````C# +using Volo.Abp.Dapper; +using Volo.Abp.Modularity; + +namespace MyCompany.MyProject +{ + [DependsOn(typeof(AbpDapperModule))] + public class MyModule : AbpModule + { + //... + } +} +```` + +## 实现Dapper仓储 + +下面的代码实现了`Person`仓储, 它需要EF Core的`DbContext`(MyAppDbContext). 你可以注入`PersonDapperRepository`来调用它的方法. + +`DbConnection`和`DbTransaction`来自于`DapperRepository`基类. + +```C# +public class PersonDapperRepository : DapperRepository, ITransientDependency +{ + public PersonDapperRepository(IDbContextProvider dbContextProvider) + : base(dbContextProvider) + { + } + + public virtual async Task> GetAllPersonNames() + { + return (await DbConnection.QueryAsync("select Name from People", transaction: DbTransaction)) + .ToList(); + } + + public virtual async Task UpdatePersonNames(string name) + { + return await DbConnection.ExecuteAsync("update People set Name = @NewName", new { NewName = name }, + DbTransaction); + } +} +``` diff --git a/docs/zh-Hans/Entity-Framework-Core.md b/docs/zh-Hans/Entity-Framework-Core.md index e709767652..6a7f69c2aa 100644 --- a/docs/zh-Hans/Entity-Framework-Core.md +++ b/docs/zh-Hans/Entity-Framework-Core.md @@ -10,7 +10,7 @@ Install-Package Volo.Abp.EntityFrameworkCore ``` -然后添加 `AbpEntityFrameworkCoreModule` 模块依赖项(`DependsOn` Attribute) 到 [module](Module-Development-Basics.cn.md)(项目中的Mudole类): +然后添加 `AbpEntityFrameworkCoreModule` 模块依赖项(`DependsOn` Attribute) 到 [module](Module-Development-Basics.md)(项目中的Mudole类): ````C# using Volo.Abp.EntityFrameworkCore; diff --git a/docs/zh-Hans/docs-nav.json b/docs/zh-Hans/docs-nav.json index fb147ac0fe..60c4afb3d7 100644 --- a/docs/zh-Hans/docs-nav.json +++ b/docs/zh-Hans/docs-nav.json @@ -242,6 +242,10 @@ { "text": "MongoDB 集成", "path": "MongoDB.md" + }, + { + "text": "Dapper 集成", + "path": "Dapper.md" } ] }, From 60ae9dd4ae1504ab24706498383a472ec852144f Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 2 Sep 2019 09:53:41 +0800 Subject: [PATCH 3/6] Resolve #1697 Show menu and submenu icon. --- .../Themes/Basic/Components/Menu/Default.cshtml | 11 ++++++++++- .../Themes/Basic/Components/Menu/_MenuItem.cshtml | 7 +++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Menu/Default.cshtml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Menu/Default.cshtml index cace550248..61b9ef49ee 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Menu/Default.cshtml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Menu/Default.cshtml @@ -27,7 +27,16 @@ {