public async Task ShouldMapUrls()
        {
            //     HttpContext.Current = new HttpContext(
            //new HttpRequest("", "http://tempuri.org", "") {Headers = {["X-Panel-Request"]="true"}},
            //new HttpResponse(new StringWriter())
            //);

            await _menuDataService.AddAsync(new Menu()
            {
                Title        = "testMenu",
                LanguageName = "fa-IR"
                ,
                MenuItems = new List <MenuItem>()
                {
                    new MenuItem()
                    {
                        Title = "page1", TargetId = _pageDataService.Query.First().Id, TargetType = MenuItemTargetType.Page, LanguageName = "fa-IR"
                    },
                    new MenuItem()
                    {
                        Title = "category1", TargetType = MenuItemTargetType.Category, TargetId = _categoryDataService.Query.First().Id, LanguageName = "fa-IR"
                    },
                    new MenuItem()
                    {
                        Title = "custom1", TargetType = MenuItemTargetType.CustomLink, Url = "www.google.com", LanguageName = "fa-IR"
                    },
                    new MenuItem()
                    {
                        Title = "entity1", TargetId = _entityData.Query.First().Id, TargetType = MenuItemTargetType.Entity, LanguageName = "fa-IR"
                    },
                    new MenuItem()
                    {
                        Title = "user1", TargetType = MenuItemTargetType.UserProfile, TargetId = _userData.Query.First().Id, LanguageName = "fa-IR"
                    }
                }
            });

            //var menus=   _menuDataService.Query.Include(x=>x.MenuItems).ToList();
            //foreach (var menu in menus)
            //{
            //    foreach (var menuiItem in menu.MapToViewModel().MenuItems)
            //    {
            //        Console.WriteLine(menuiItem.Url);
            //    }
            //}
            //await _menuDataService.Query.Where(x => x.Title == "testMenu").DeleteAsync();
        }
        public async Task <MenuResponse> Add(MenuAddRequest request)
        {
            if (!HasPremission(request.RequestOwner, MenuPremssion.CanAdd))
            {
                return(UnauthorizedRequest());
            }
            var menuWithItems = request.ViewModel.MapToModel();

            await BaseBeforeAddAsync(menuWithItems, request.RequestOwner);

            await _menuDataSrv.AddAsync(menuWithItems);

            await request.ViewModel.MenuItems.ForEachAsync(x => _metaDataHandler.HandleAddition(x.MetaData));

            await BaseAfterAddAsync(menuWithItems, request.RequestOwner);

            return(new MenuResponse
            {
                Access = ResponseAccess.Granted,
                Menu = menuWithItems.MapToViewModel()
            });
        }
        public async Task OnRecordEditConfirm()
        {
            #region 進行 Form Validation 檢查驗證作業
            if (LocalEditContext.Validate() == false)
            {
                return;
            }
            #endregion

            #region 檢查資料完整性
            if (isNewRecordMode == true)
            {
                var checkedResult = await CurrentService
                                    .BeforeAddCheckAsync(CurrentRecord);

                if (checkedResult.Success == false)
                {
                    MessageBox.Show("400px", "200px", "警告",
                                    VerifyRecordResultHelper.GetMessageString(checkedResult), MessageBox.HiddenAsync);
                    await thisView.NeedRefreshAsync();

                    return;
                }
            }
            else
            {
                var checkedResult = await CurrentService
                                    .BeforeUpdateCheckAsync(CurrentRecord);

                if (checkedResult.Success == false)
                {
                    MessageBox.Show("400px", "200px", "警告",
                                    VerifyRecordResultHelper.GetMessageString(checkedResult), MessageBox.HiddenAsync);
                    await thisView.NeedRefreshAsync();

                    return;
                }
            }


            #endregion

            if (IsShowEditRecord == true)
            {
                if (isNewRecordMode == true)
                {
                    var verifyRecordResult = await CurrentService.AddAsync(CurrentRecord);

                    await TranscationResultHelper.CheckDatabaseResult(MessageBox, verifyRecordResult);

                    dataGrid.RefreshGrid();
                }
                else
                {
                    var verifyRecordResult = await CurrentService.UpdateAsync(CurrentRecord);

                    await TranscationResultHelper.CheckDatabaseResult(MessageBox, verifyRecordResult);

                    dataGrid.RefreshGrid();
                }
                IsShowEditRecord = false;
            }
        }