diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs index fa2505eecc..56cef52826 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs @@ -80,7 +80,7 @@ public class MenuItem : AuditedAggregateRoot, IMultiTenant Url = Check.NotNullOrEmpty(url, nameof(url), MenuItemConsts.MaxUrlLength); } - internal void SetPageId(Guid pageId) + internal void SetPageId(Guid? pageId) { PageId = pageId; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItemManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItemManager.cs index 76d95f175f..be83b455d2 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItemManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItemManager.cs @@ -25,6 +25,12 @@ public class MenuItemManager : CmsKitDomainServiceBase menuItem.SetUrl(page.Slug.EnsureStartsWith('/')); } + public virtual void SetPageUrl(MenuItem menuItem, string url) + { + menuItem.SetPageId(null); + menuItem.SetUrl(url); + } + [UnitOfWork] public virtual async Task MoveAsync(Guid menuItemId, Guid? newParentMenuItemId, int position = 0) { diff --git a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Menus/MenuManager_Test.cs b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Menus/MenuManager_Test.cs index bcc1612d41..36900219d4 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Menus/MenuManager_Test.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Menus/MenuManager_Test.cs @@ -35,6 +35,20 @@ public class MenuManager_Test : CmsKitDomainTestBase menuItem.Url.ShouldBe(page.Slug.EnsureStartsWith('/')); } + [Fact] + public async Task SetPageUrl_ShouldSetUrlSameWithPage_WithStringUrl() + { + var newUrl = "/my-new-url"; + + var menuItem = await menuItemRepository.GetAsync(testData.MenuItem_4_With_Page_1_Id); + + menuManager.SetPageUrl(menuItem, newUrl); + + menuItem.Url.ShouldNotBeNullOrEmpty(); + menuItem.Url.ShouldBe(newUrl); + menuItem.PageId.ShouldBeNull(); + } + [Fact] public async Task MoveAsync_ShouldMoveCorrectly_UnderAnotherMenu() {