рдмреНрд▓реЗрдЬрд╝рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдСрдирд▓рд╛рдЗрди рд╕реНрдЯреЛрд░: рднрд╛рдЧ 4 - рдХрд╛рд░реНрдЯ рдореЗрдВ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝реЗрдВ



рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдореИрдВ рдмреНрд▓реЗрдЬрд╝рд░ рдкрд░ рдСрдирд▓рд╛рдЗрди рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реВрдВред рдЗрд╕ рднрд╛рдЧ рдореЗрдВ рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдБрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдореИрдВрдиреЗ рдЯреЛрдХрд░реА рдореЗрдВ рд╕рд╛рдорд╛рди рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реАред рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд┐рд▓реНрд▓реА рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рд╕рд╛рдордЧреНрд░реА



рд╕рдВрджрд░реНрдн


тЖТ  рд╕реНрд░реЛрдд
тЖТ рдбреЛрдХрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдкрд░ рдЫрд╡рд┐рдпрд╛рдВ

рдХреЛрдб


ProductModel рдореЙрдбрд▓ рдореЗрдВ рдЯреЛрдХрд░реА рдореЗрдВ рдЙрддреНрдкрд╛рджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╖реЗрддреНрд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред

   public int ItemsInBasketCount { get; set; }

рдореЗрдВ ProductViewModel рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛:
рдкреЙрдк-рдЕрдк рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

        [Inject]
        public AuthenticationStateProvider AuthStateProvider { get; set; }

        [Inject]
        public IJSRuntime Js { get; set; }

рдЯреЛрдХрд░реА рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╡рд░реНрддрдорд╛рди рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

        private async Task LoadItemsInBasketCount()
        {
            var (res, err) = await Repository.GetItemsInBasketCount();
            if (!string.IsNullOrWhiteSpace(err))
            {
                Model.HandledErrors += $";{err}";
            }
            else
            {
                Model.ItemsInBasketCount = res;
            }
        }

рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕реНрдерд┐рддрд┐ рдЬрд╛рдВрдЪреЗрдВред

        private async Task<bool> IsAuth()
        {
            var state = await AuthStateProvider.GetAuthenticationStateAsync();
            return state?.User?.Identity?.IsAuthenticated ?? false;
        }

рдХрд╛рд░реНрдЯ рдореЗрдВ рдЙрддреНрдкрд╛рдж рдЬреЛрдбрд╝рдирд╛ред

        public async Task AddToBasket(Guid productId)
        {
            Model.IsLoaded = false;
            if (!await IsAuth())
            {
                await Js.InvokeVoidAsync(
                     "alert",
                     "        .       ."
                     );
                Model.IsLoaded = true;
                return;
            }
            var (r, e) = await Repository.AddToBasket(productId);
            Model.HandledErrors = e;
            Model.IsLoaded = true;
            await LoadItemsInBasketCount();
        }

Products.razor рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛:

рдЯреЛрдХрд░реА рдореЗрдВ рдЙрддреНрдкрд╛рджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

<AuthorizeView>
    <Authorized>
          : @Model.ItemsInBasketCount
    </Authorized>
</AuthorizeView>

рдХрд╛рд░реНрдЯ рдореЗрдВ рдХреЛрдИ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдПред

<td>
    <input type="button"
           value="  "
           class="btn btn-success"
           @onclick="@(async x=> await AddToBasket(product.Id))" />
</td>

рдХреЛрдгреАрдп рд╕рдВрд╕реНрдХрд░рдг



All Articles