BlazingPizza: рд╢реБрд░реВ рд╕реЗ рдЕрдВрдд рддрдХ рдмреНрд▓реЗрдЬрд╝рд░ рдРрдкред рднрд╛рдЧ 2. рдПрдХ рдШрдЯрдХ рдЬреЛрдбрд╝реЗрдВ

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рдЙрди рд╕рднреА рдХреЗ рд▓рд┐рдП рдЬреЛ рдмреНрд▓реЗрдЬрд╝рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЖрдЬ рд╣рдо рдПрдХ рдкрд┐рдЬрд╝реНрдЬрд╝реЗрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕рд╛рдЗрдЯ рдмрдирд╛рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗ, рдЕрд░реНрдерд╛рддреН, рд╣рдо рдПрдХ рд╡реЗрдм рдПрдкреАрдЖрдИ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдмреНрд▓реЗрдЬрд╝рд░ рдШрдЯрдХ рдкрд░ рдЗрд╕рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред

рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рдкрд┐рдЬреНрдЬрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдореБрдЦреНрдп рдЙрддреНрдкрд╛рдж рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдЧ рдХреЛ рддреБрд░рдВрдд рдЬреЛрдбрд╝рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ред

рдЗрд╕реЗ рдмреЗрд╕рдкрд┐рдЬрд░ рдХрд╣рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдмреНрд▓реЗрдЬрд┐рдВрдЧрдкрд┐рдЬрд░.рдбреЛрдореЗрдирдореЙрдбрд▓реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ ред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд░рд╛рдЗрдбрд░ рдореЗрдВ рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдЬреЛрдбрд╝рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рдПрдХ рдЧреИрд░-рдЕрд╡рд░реЛрдзрдХ рд╕рдВрд╡рд╛рдж рдкреЙрдк рдЕрдк рд╣реЛрддрд╛ рд╣реИ, рд╣рдо рдХрдХреНрд╖рд╛ рдХреЗ рдирд╛рдо рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╣рдо рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдХреНрдпрд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:



рдЙрд╕рдХреЗ рдмрд╛рдж, рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЧрд┐рдЯ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрд╡рд╛рдж рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рд╣рдо рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЬрд╡рд╛рдм рджреЗрдВрдЧреЗред

рдХрдХреНрд╖рд╛ рд╕рд╛рдордЧреНрд░реА:

public class BasePizza
{
  public int Id { get; set; }
    
    public string Name { get; set; }
    
    public decimal BasePrice { get; set; }
    
    public string Description { get; set; }
    
    public string ImageUrl { get; set; }
}

рдпрд╣ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд┐рдЬреНрдЬрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╣реИ, рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдЖрдХрд╛рд░ рдмрджрд▓рддреЗ рд╣реИрдВ, рдЯреЙрдкрд┐рдВрдЧ рдФрд░ рдЕрдзрд┐рдХ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЦреЗрддреЛрдВ рдХрд╛ рдирд╛рдо рдореБрдЭреЗ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдмреЛрд▓рдиреЗ рд▓рдЧрддрд╛ рд╣реИред BlazingPizza.DomainPizza

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ , рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдбреЛрдореЗрди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрдХреНрд╖рд╛рдПрдВ рд╣реЛрдВрдЧреАред рдпрд╣реА рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╡рд╕реНрддреБ, рдпрд╛рдиреА рдкрд┐рдЬреНрдЬрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реАред рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдпрд╣ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд░ рдЬрд╛рдПрдБ BlazingPizza.Server рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рдЬреЛрдбрд╝рдиреЗ PizzasController рдХреЗ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдлрд╝реЛрд▓реНрдбрд░ :



public class PizzasController : Controller
{
    // GET
    public IActionResult Index()
    {
        return View();
    }
}

рд╣рдореЗрдВ рдПрдХ рдРрд╕реА рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдкрд┐рдЬреНрдЬрд╛ рдХреЗ рд▓рд┐рдП рд╕рднреА рдореВрд▓ рдмрд╛рддреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд╛рди рдХрд░реЗред

рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдХреБрдЫ рд╕рд░рд▓ рдЙрдкрд╛рдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  1. рдЪрд▓реЛ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ [ApiController] рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХреБрдЫ рд▓рд╛рдн рджреЗрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, 400 рдХреЛрдб рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░рд┐рдЯрд░реНрди рдпрджрд┐ рдореЙрдбрд▓ рдиреЗ рд╕рддреНрдпрд╛рдкрди рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛, рддреЛ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдПрдорд╡реАрд╕реА рдирд┐рдпрдВрддреНрд░рдХ рд╣реИ рдЬреЛ рджреГрд╢реНрдп рджреЗрддрд╛ рд╣реИред
  2. [Route(┬лpizzas┬╗)]. Attribute Routing, , Conventional Routing, . тАЬpizzasтАЭ ? http{s}://hostName/pizzas/{}
    .
  3. Controller ControllerBase, MVC .

рдареАрдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдХ рд╕реНрдерд╛рдиреАрдпрд╣реЛрд╕реНрдЯ рдмрдирд╛рдпрд╛ : рд╕рднреА рдкрд┐рдЬреНрдЬрд╛ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╢рд╛ рдореЗрдВ 5000 / рдкрд┐рдЬреНрдЬрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реБрдЖред рдлрд┐рд░, рд╕рдордЭреМрддрд╛ рд╕рдордЭреМрддреЛрдВ рдореЗрдВ рд╣реИред

рдпрджрд┐ рдпрд╣ рдПрдХ рдерд╛ рдкреНрд░рд╛рдкреНрдд рдЕрдиреБрд░реЛрдз, рддреЛ рд╣рдо рдпрд╛ рддреЛ рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП (рд╣реИ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ Asp.Net ) рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд [HttpGet] рд╡рд┐рд╢реЗрд╖рддрд╛ , рдпрд╛, рдФрд░ рднреА рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдмрд╕ рдПрдХ рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдпрд╣ рд╣реИ рдХрд┐! рдмрд╛рдХреА рд╕рдм рдХреБрдЫ .Net рдФрд░ рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред
рдФрд░ рдЗрд╕рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╕реВрдЪрдХрд╛рдВрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВред IEnumerable <BasePizza> рдкрд░ рд╡рд╛рдкрд╕реА рдорд╛рди рдХрд╛ рдкреНрд░рдХрд╛рд░ рдмрджрд▓реЗрдВрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ред рдЦреИрд░, рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдПрдХ рд╕реНрдЯрдм рдбрд╛рд▓реЗрдВ рдХрд┐ рд╡рд┐рдзрд┐ рдХреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, PizzasController.cs рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using BlazingPizza.DomainModels;

namespace BlazingPizza.Server.Controllers
{
    [ApiController]
    [Route("pizzas")]
    public class PizzasController : ControllerBase
    {
        // GET
        public IEnumerable<BasePizza>  Get()
        {
            throw new NotImplementedException();
        }
    }
}

рдЕрднреА, рдбрд┐рдмрдЧрд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рд╣рд░реЗ рдмрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдмрдЯрди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред



рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдорд╛рд░реНрдЧ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЬрд┐рд╕ рдкреЛрд░реНрдЯ рдкрд░ рдЖрдкрдХреЛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╡рд╣ рдХрдВрд╕реЛрд▓ рдЯреИрдм рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ :



рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ 5000 рд╣реИ, рдпрджрд┐ рдЖрдк рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ : 5000 / рдкрд┐рдЬреНрдЬрд╛ рдкрде, рд╣рдо рдЧреЗрдЯ рдПрдХреНрд╢рди рдореЗрдВ рдкрд╣реБрдВрдЪ рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рдиреЛрдЯрд┐рдлрд╝рд╛рдЗрдб рдПрдХреНрд╕рд╕реЗрдкреНрд╢рди рдкрдХрдбрд╝ рд▓реЗрдВрдЧреЗред рдпрд╣реА рд╣реИ, рдЬрдмрдХрд┐ рд╣рдорд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рдХ рдХреБрдЫ рднреА рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛрддрд╛ рд╣реИред

рд╣рдо рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗ рдбреЗрдЯрд╛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВ


рдпрд╣ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдкрд┐рдЬреНрдЬрд╛ рд▓реМрдЯрд╛рдирд╛ред рдЕрдм рддрдХ, рд╣рдордиреЗ рдПрдХ рдбреЗрдЯрд╛ рд▓реЗрдпрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдкрдиреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реЗ рдПрдХ-рджреЛ рдкрд┐рдЬреНрдЬрд╛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддреЗ рд╣реИрдВ ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджреЛ рдЖрдзрд╛рд░рднреВрдд рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╕реЗ рдорд┐рд▓рдХрд░ рдПрдХ рд╕рд░рдгреА рд▓реМрдЯрд╛рдПрдВ ред рдиреАрдЪреЗ рджреА рдЧрдИ рдЙрджрд╛рд╣рд░рдг рдХреА рддрд░рд╣ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ рд╡рд┐рдзрд┐ :

// GET
public IEnumerable<BasePizza>  Get()
{
    return new[]
    {
        new BasePizza()
        {
            BasePrice = 500,
            Description = "     ",
            Id = 0,
            ImageUrl = "img/pizzas/pepperoni.jpg"
        },
        new BasePizza()
        {
            BasePrice = 400,
            Description = "   ",
            Id = 1,
            ImageUrl = "img/pizzas/meaty.jpg"
        },
    };
}

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:



рд╣реЛрдо рдкреЗрдЬ рд╕реЗрдЯ рдХрд░реЗрдВ


рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рджреГрд╢реНрдпрдорд╛рди рднрд╛рдЧ, .JP рдореЗрдВ BlazingPizza.Client рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╣реИ ред рд╣рдо Pages рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ Index.razor рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ , рдЗрд╕реЗ рдЦреЛрд▓реЗрдВ рдФрд░ рдЗрд╕рдХреА рд╕рднреА рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рдЬреЛ рд╣рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИрдВред рдФрд░ рдЪрд▓рд┐рдП рдЬреЛ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред 1. рдЬреЛрдбрд╝реЗрдВ

рдкреГрд╖реНрда"/" рдпрд╣ рдирд┐рд░реНрджреЗрд╢ рдХреНрд▓рд╛рдЗрдВрдЯ рд░реВрдЯрд┐рдВрдЧ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рдпрдВрддреНрд░рдг рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЕрд░реНрдерд╛рдд, рдпрджрд┐ рд╣рдо рд╕рд┐рд░реНрдл рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрддреЗ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ : 5000 / рдмрд┐рдирд╛ рдХрд┐рд╕реА / рдЗрдВрдбреЗрдХреНрд╕, / рдкрд┐рдЬреНрдЬрд╛ рдпрд╛ рдХреБрдЫ рдФрд░ред

2редрдЗрдВрдЬреЗрдХреНрд╖рдиHttpClient HttpClient рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛рдЗрдВрдЬреЗрдХреНрд╖рди рд╣рдорд╛рд░реЗ рдкреГрд╖реНрда рдкрд░ HttpClient рдЬреИрд╕реА рд╕реЗрд╡рд╛ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ HttpClient рдХреЛ рднреА рдХреЙрд▓ рдХрд░реЗрдВ ред HttpClient рдкреНрд░рдХрд╛рд░ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдмреНрд▓реЗрдЬрд╝рд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рджреНрд╡рд╛рд░рд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреА рдЧрдИ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЗрд╡рд▓ рдЙрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЛ рдкреНрд░реЙрдкрд░реНрдЯреА рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ , рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрд╣рддреЗ рд╣реИрдВ, рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрднреА рднреА рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

3. рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝реЗрдВ

 @code{

 }

рдХреНрд▓рд╛рдЗрдВрдЯ C # рдХреЛрдб рдХреЛ рд╣реЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╡рд╣реА рдЬреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реИред рдЗрд╕ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рд╣рдо рдмреЗрд╕рдкрд╛рдЗрдЬрд░рд╡реНрдпреВрдореЙрдбрд▓ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рд░рдЦрддреЗ рд╣реИрдВ

IEnumerable<BasePizzaViewModel> PizzaViewModels;

4. рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдордЭ рдЪреБрдХреЗ рд╣реИрдВ, рдмреЗрд╕рдкрд╛рдЗрдЬрд░рд╡реНрдпреВрдореЙрдбрд▓ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдореЙрдбрд▓ рдмреЗрд╕рдкреАрдЬрд╛рдЗрд░рд╛ рдбреЛрдореЗрди рдореЙрдбрд▓ рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЗрд╕рдореЗрдВ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдмреЙрдбреА рд╣реЛрдЧреА GetFormattedBasePrice рд╣рдореЗрдВ рдЬрд┐рд╕ рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рдмреЗрд╕ рдкрд┐рдЬреНрдЬрд╛ рдХреА рдХреАрдордд рдЪрд╛рд╣рд┐рдП, рд╡рд╣ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдореЙрдбрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдореВрд▓ рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ BlazingPizza.ViewModels рдлрд╝рд╛рдЗрд▓ BasePizzaViewModel.cs :

public class BasePizzaViewModel
{
    public int Id { get; set; }
    
    public string Name { get; set; }
    
    public decimal BasePrice { get; set; }
    
    public string Description { get; set; }
    
    public string ImageUrl { get; set; }
    
    public string GetFormattedBasePrice() => BasePrice.ToString("0.00");
}

5. рд╣рдорд╛рд░реЗ Index.razor рдФрд░ рдмреНрд▓реЙрдХ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВрдХреЛрдб, рд╕рднреА рдЙрдкрд▓рдмреНрдз рдкрд┐рдЬреНрдЬрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВред рд╣рдо рдЗрд╕ рдХреЛрдб рдХреЛ async onInitializedAsync рд╡рд┐рдзрд┐ рдореЗрдВ рд░рдЦреЗрдВрдЧреЗ :

protected async override Task OnInitializedAsync() {
	
}

рдШрдЯрдХ рдЖрд░рдВрдн рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдФрд░ рдХреЙрд▓ рдХреЗ рд╕рдордп рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╕рднреА рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореВрд▓ рдШрдЯрдХ рджреНрд╡рд╛рд░рд╛ рдЖрд░рдВрдн рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ, рдЖрдк рдХреБрдЫ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдПрдХ рд░рд╛рдЬреНрдп рдЕрджреНрдпрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдмрд╛рдж рдореЗрдВ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред рдШрдЯрдХ рдмрдирдиреЗ рдкрд░ рд╡рд┐рдзрд┐ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдВрдд рдореЗрдВ, рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдкреНрд░рд╛рдкреНрдд рдкрд┐рдЬреНрдЬрд╛ рдЬреЛрдбрд╝реЗрдВ:

var queryResult = await HttpClient.GetJsonAsync<IEnumerable<BasePizza>>("pizzas");

рдкрд┐рдЬреНрдЬрд╛ - рдПрдХ рд░рд┐рд╢реНрддреЗрджрд╛рд░ рдкрде рдЬреЛ рдмреЗрд╕ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмреНрд▓реЗрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдЬреИрд╕рд╛ рдХрд┐ рд╡рд┐рдзрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ, рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдЕрдиреБрд░реЛрдз рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдЙрдиреНрд╣реЗрдВ IEnumerable <BasePizza> рдореЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ ред

6. рдЪреВрдВрдХрд┐ рд╣рдореЗрдВ рдЧрд▓рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдШрдЯрдХ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ BasePizzaViewModel рдкреНрд░рдХрд╛рд░ рдХреА рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ ред рдЗрд╕рдХреЗ рд▓рд┐рдП, Linq рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЪреБрдирд┐рдВрджрд╛ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рдЕрдВрдд рдореЗрдВ OnInitializedAsync рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ :

PizzaViewModels = queryResult.Select(i => new BasePizzaViewModel()
{
    BasePrice = i.BasePrice,
    Description = i.Description,
    Id = i.Id,
    ImageUrl = i.ImageUrl,
    Name = i.Name
});

рдмрд╛рдж рдореЗрдВ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЗрд╕ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛрдб рдХреЛ рд▓рд┐рдЦреЗ рдмрд┐рдирд╛ рдХреИрд╕реЗ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╣ рд╕рдм рдХреБрдЫ рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

7. рдХреЛрдб рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдКрдкрд░, html рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ , рдЬрд┐рд╕рдХреЗ рдЕрдВрджрд░ рдЦреБрдж рдкрд┐рдЬреНрдЬрд╛ рд╣реЛрдЧрд╛:

<div class="main">
    <ul class="pizza-cards">

    </ul>
</div>

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдм рддрдХ рдХреА рдмрд╛рдд рдХрд░рддреЗ рд╣реБрдП, "рдкрд┐рдЬрд╝реНрдЬрд╝рд╛-рдХрд╛рд░реНрдбреНрд╕" рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕реВрдЪреА рдЦрд╛рд▓реА рд╣реИ, рд╣рдо рдЗрд╕ рдирд┐рд░реАрдХреНрд╖рдг рдХреЛ рдареАрдХ рдХрд░реЗрдВрдЧреЗ:

@foreach (var pizza in PizzaViewModels)
{
    <li style="background-image: url('@pizza.ImageUrl')">
        <div class="pizza-info">
            <span class="title">@pizza.Name</span>
                @pizza.Description
            <span class="price">@pizza.GetFormattedBasePrice()</span>                    
        </div>
    </li>
}

рдпрд╣рд╛рдВ рдХрд╛ рд╕рд╛рд░рд╛ рдордЬрд╛ рд▓реВрдк рдХреЗ рдЕрдВрджрд░ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП(var {item} in {items})
рдпрд╣ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реЗрдЬрд░ рдорд╛рд░реНрдХрдЕрдк рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдирд┐рдпрдорд┐рдд HTML рдХреЛрдб рдХреЗ рд╕рдорд╛рди рдкреЗрдЬ рдкрд░ C # рдХреА рд╢рдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ ред рдореБрдЦреНрдп рдмрд╛рдд рднрд╛рд╖рд╛ рдХреАрд╡рд░реНрдб рдФрд░ рдЪрд░ рдХреЗ рд╕рд╛рдордиреЗ "@" рдкреНрд░рддреАрдХ рд░рдЦрдирд╛ рд╣реИ ред рд▓реВрдк рдХреЗ рдЕрдВрджрд░, рд╣рдо рдмрд╕ рдкрд┐рдЬреНрдЬрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдгреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ ред рдЕрдВрдд рдореЗрдВ, рд╣рдо GetFormattedBasePrice рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд┐рдЬрд╝реНрдЬрд╝рд╛ рдХреЗ рд╕реНрд╡рд░реВрдкрд┐рдд рдЖрдзрд╛рд░ рдореВрд▓реНрдп рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ ред рдпрд╣, рд╡реИрд╕реЗ, рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рд╣реИ BasePizza рдбреЛрдореЗрди рдореЙрдбрд▓ рдФрд░ рдЙрд╕рдХреЗ ViewModel



рдЕрднреНрдпрд╛рд╡реЗрджрди, рдЪреВрдВрдХрд┐ рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдореВрд▓реНрдп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реНрдХ рд╣реИрдВ, рдЬрд┐рдирдХреА рд╣рдореЗрдВ рд╕реЗрд╡рд╛ рд╕реНрддрд░ рдкрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЬрд╣рд╛рдВ рд╣рдо рдХрд┐рд╕реА рддрд░рд╣ рдореВрд▓реНрдп рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХрд╣реАрдВ рднреА рдирд╣реАрдВ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред

рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ


рд╣рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рд╛ рд╣реИред рдпрд╣ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рдо рдбрд┐рдмрдЧ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ ( рд░рд╛рдЗрдбрд░ рдореЗрдВ, рд░рди рдмрдЯрди рдмрд╕ рдбрд┐рдмрдЧ рдХреНрд╖рдорддрд╛ рдХреЗ рдмрд┐рдирд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ )ред

рдФрд░ рдКрд╣-рд╣реЛ, рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ :) рдХрдВрд╕реЛрд▓ ( F12 ) рдЦреЛрд▓реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рд╕рдм рд▓рд╛рд▓ рд╣реИ, рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЧрд▓рдд рд╣реЛ рдЧрдпрд╛ред рдмреНрд▓реЗрдЬрд╝рд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдореЗрдВ рдЗрддрдирд╛ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рдкреВрд░реЗ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдХрдВрд╕реЛрд▓ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ , рдФрд░ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдпрд╣ рдПрдХ рд╣реА рдХреЛрдгреАрдп рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рднреА рдмреЗрд╣рддрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд╕рдВрдХреЗрддреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХрд╣рд╛рдВ рд╣реБрдИ, рдмрд╕ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдХреЛ рджреЗрдЦреЗрдВ:



рдкреГрд╖реНрда рд░реЗрдВрдбрд░ рдХрд░рддреЗ рд╕рдордп рдПрдХ NullReferenceException рд╕рдВрджреЗрд╢ рдЖрдпрд╛ ред рдпрд╣ рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдПрдХрдорд╛рддреНрд░ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо OnInitializedAsync рд╡рд┐рдзрд┐ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рдЯрд╛рдЗрдо рдЖрдЙрдЯрдкреБрдЯ рдбрд╛рд▓реЗрдВ, рдЬреЛ рд╣реБрдЖ рдЙрд╕рдХрд╛ рдЯрд╛рдЗрдордлреНрд░реЗрдо рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП:

  1. Console.WriteLine($"Time from markup block: {DateTime.Now.ToString()}:{DateTime.Now.Millisecond.ToString()}");
  2. Console.WriteLine($"Time from cycle: {DateTime.Now.ToString()}:{DateTime.Now.Millisecond.ToString()}");
  3. Console.WriteLine($"Time from code block, before await: {DateTime.Now.ToString()}:{DateTime.Now.Millisecond.ToString()}");
  4. Console.WriteLine($"Time from code block, after await: {DateTime.Now.ToString()}:{DateTime.Now.Millisecond.ToString()}"); 



рдиреАрдЪреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ, рдХрдВрд╕реЛрд▓ рдореЗрдВ, рдкреЗрдЬ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд╕рдордп рдХреНрдпрд╛ рд╣реБрдЖред рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкреГрд╖реНрда рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред
рдкрд╣рд▓реЗ рдкрд╛рд╕ рдкрд░, PizzaViewModels рдХреЛ рдЕрднреА рддрдХ рдЖрд░рдВрдн рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд╣рдордиреЗ NullReferenceException рдХреЛ рдкрдХрдбрд╝рд╛ рдерд╛ ред рдлрд┐рд░, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рдЯрд╛рд╕реНрдХ рдиреЗ OnInitializedAsync рд╡рд┐рдзрд┐ рдХреЛ RanToCompletion рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж , рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рдЗрдВрдЬреАрдирд┐рдпрд░ рдХрд┐рдпрд╛ рдерд╛ред рдХреНрдпрд╛ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ, рджреВрд╕рд░реЗ рдкрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рд╣рдо рдПрдХ рдЪрдХреНрд░ рдореЗрдВ рдЖ рдЧрдП, рдЬреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╕рдВрджреЗрд╢реЛрдВ рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, UI рдЕрдм рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдХреЛрдИ рднреА рджреГрд╢реНрдп рдкрд░рд┐рд╡рд░реНрддрди рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред



рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рдЖрдкрдХреЛ рдмрд╕ рд▓реВрдк рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдЕрд╢рдХреНрдд рдЬрд╛рдВрдЪ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ , рдлрд┐рд░ рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдФрд░ рджреВрд╕рд░реЗ рдкрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рд╣рдореЗрдВ рд╡рд╣ рдбреЗрдЯрд╛ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
@if (PizzaViewModels != null)
{
    @foreach (var pizza in PizzaViewModels)
    {
        тАжтАжтАжтАжтАжтАжтАжтАжтАж.. //    
    }
}


рдпрд╣ рдЕрдм рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИ, рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЖрдк рд╕рд░реНрд╡рд░ рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдИ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:



рдпрд╣ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░реНрдпрд╛рдкреНрдд рдЪрд┐рддреНрд░ рдФрд░ рд╕рдВрд╕рд╛рдзрди рдирд╣реАрдВ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЪрд┐рддреНрд░реЛрдВ рдореЗрдВ wwwroot рдлрд╝реЛрд▓реНрдбрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдлрд╝реЛрд▓реНрдбрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ ~ ~ / рд▓реЗрдЦ / рднрд╛рдЧ 2 /BlazingPizza.Client/wwwroot "рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА (рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рд▓рд┐рдВрдХ) рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдПрдВ, рдЗрддрдирд╛ рдмреЗрд╣рддрд░ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрднреА рднреА рдЖрджрд░реНрд╢ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИ:



рдШрдЯрдХ рдЬреАрд╡рди рдХреА рдШрдЯрдирд╛рдПрдБ


рдЪреВрдВрдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╣реА OnInitializedAsync рдШрдЯрдХ рдЬреАрд╡рди рдХреА рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗ рдорд┐рд▓ рдЪреБрдХреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рджреВрд╕рд░реЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛:
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рддрд░реАрдХреЗ
Oninitialized
рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдШрдЯрдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрд░рдВрднрд┐рдХ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореВрд▓ рдШрдЯрдХ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдПрдХ рдШрдЯрдХ рдХреЗ рдЬреАрд╡рди рдХреЗ рджреМрд░рд╛рди, рдЗрд╕реЗ рдЗрд╕рдХреЗ рдЖрд░рдВрдн рдХреЗ рдмрд╛рдж рдПрдХ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
OnInitializedAsync
рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж рдкрд╣рд▓реА рд╡рд┐рдзрд┐ рдХрд╛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕рдВрд╕реНрдХрд░рдг, рдШрдЯрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдСрдмреНрдЬреЗрдХреНрдЯ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╡рд┐рдзрд┐
SetParametersAsync
, . ParameterView .

[Parameter] [CascadingParameter] ParameterView. , . , )

OnParametersSet
. ,

тАФ .
тАФ , .
OnParametersSetAsyncOnParametersSet
OnAfterRender. . JavaScript DOM . bool firstRender true .
OnAfterRenderAsync
, Task , - .

ShouldRender
UI, - . . .
StateHasChanged
, Blazor .
Dispose
, UI. StateHasChanged Dispose . Dispose IDisposable, @implements IDisposable


рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗ рдбреЗрдЯрд╛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдЗрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПред
рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рд▓реЗрдЖрдЙрдЯ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдореБрдЦреНрдп рдкреГрд╖реНрда рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рд▓реЗрдпрд░ рдЬреЛрдбрд╝реЗрдВрдЧреЗред рд▓реЗрдЦреЛрдВ рдХреА рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рднрдВрдбрд╛рд░ рд╕реЗ

рд▓рд┐рдВрдХ рдХрд░реЗрдВ ред рдореВрд▓ рд╕реНрд░реЛрдд рд╕реЗ
рд▓рд┐рдВрдХ рдХрд░реЗрдВ ред

Source: https://habr.com/ru/post/undefined/


All Articles