рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░!
рддреЛ рд╣рд╛рдБ, рдиреЗрдЯ рдХреЛрд░ 3.0 рдЬрд▓реНрдж рд╣реА рдЖ рд░рд╣рд╛ рд╣реИ рдФрд░ рдмреНрд▓реЗрдЬрд╝рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╣реЛрдЧрд╛ рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдирд╛рдо, рдХреБрдЫ Pokemon рдХреЗ рдирд╛рдо рдХреЗ рд╕рдорд╛рди рд╣реИред рдмреНрд▓реЗрдЬрд╝рд░ рд▓рдбрд╝рд╛рдИ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ! рдореИрдВрдиреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рдЬрд╛рдирд╡рд░ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рдПрдХ рдЯреЛрдбреЛ рд╢реАрдЯ рдмрдирд╛рдИред рдЦреИрд░, Vue.js рдкрд░ рднреА, рдЗрд╕ рд╡рд┐рд╖рдп рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рд╡реЗ рджреЛрдиреЛрдВ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХрддрд╛ рдореЗрдВ рдШрдЯрдХ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рдорд╛рди рд╣реИрдВ, рдФрд░ рдпрд╣ рд╕рдмред рдЕрдзрд┐рдХ рджреЗрд╡реА рджреЗрд╡рддрд╛! рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдпреБрд╡рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрд╛рдЗрдб рд╣реИ, рди рдХрд┐ рдордЬрдмреВрдд рджрд┐рдорд╛рдЧ рдЬреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реИрдВ рдФрд░ рд╕рд╛рдЗрдЯ рдкрд░ рдмрдЯрди рдФрд░ рдЗрдирдкреБрдЯ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрд╕ рдореЗрдо рдХреА рддрд░рд╣ - "рддрдХрдиреАрдХреА рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдПрдХ рдХрд┐рддрд╛рдм рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ рд▓реЗрдХрд┐рди рдирд┐рд░реНрджреЗрд╢ рдирд┐рдХрд▓рд╛ред" рд╕рд╛рдордиреЗ рдХреЗ рдЫреЛрд░ рдореЗрдВ рдореЗрд░реЗ рдХрд╛рд░рдирд╛рдореЛрдВ рдореЗрдВ рдХреМрди рджрд┐рд▓рдЪрд╕реНрдкреА рд░рдЦрддрд╛ рд╣реИ рдпрд╛ рдЖрдкрдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рдмрд┐рд▓реНрд▓реА рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рдмреНрд▓реЗрдЬрд╝рд░ рд╣реИред
рдкрд░рд┐рдЪрдп
Microsoft рдиреЗ рдПрдХ рдмрд╛рд░ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ C # рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд░рдЦрд╛ рдФрд░ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ Silverlight рдХрд╣рд╛ред рдпрд╣ рдмрдВрдж рдирд╣реАрдВ рд╣реБрдЖред рдпреЗ рдЖрдкрдХреЗ рдЯрд╛рдпрд░рдиреЗрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рднрд┐рдиреНрди рдереЗред рдореБрдЭреЗ рдХреНрдпреЛрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдм рджреВрд░ рд╣реЛ рд░рд╣рд╛ рд╣реИ? рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рд╡реЗрдм рдЕрд╕реЗрдВрдмрд▓реА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рднреА рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рд╣реИрдВред рдЕрд▓рдЧ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдПрдХ рдФрд░ рдореБрджреНрджрд╛ рдЖрд╡реЗрджрди рдЖрдХрд╛рд░ рд╣реИред рдпрджрд┐ Vue.js SPA рдХрд╛ рд╡рдЬрди 1.7 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рд╣реИ, рддреЛ рдмреНрд▓реЗрдЬрд╝рд░ 21 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдкрд░ рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рд╣реИред рдЕрдм рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдХреЗ рджреМрд░рд╛рди рдЗрдВрдЯрд░рдиреЗрдЯ рддреЗрдЬреА рд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдПрдХ рдмрд╛рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ рдХреИрд╢ рдФрд░ рд╕рднреА рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, Blazor Vue.js. рдХреЗ рд╕рдорд╛рди рдерд╛ред рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╕рд┐рд▓реНрд╡рд░рд▓рд┐рдЧреНрдЯ, WPF рдФрд░ UWP рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реНрд░рджреНрдзрд╛рдВрдЬрд▓рд┐ рдХреЗ рд░реВрдк рдореЗрдВ, рдФрд░ рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ рд╢рд╛рд░реНрдкрд░реНрд╕ рдХреЗ рдмреАрдЪ рдЗрддрдирд╛ рдЖрдо рдерд╛, рдореИрдВрдиреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП MVVM рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП - рдореИрдВ рдЖрдо рддреМрд░ рдкрд░ рдмреИрдХ-рдПрдВрдб рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдмреНрд▓реЗрдЬрд░ рдкрд╕рдВрдж рд╣реИред рдореИрдВ рджрд┐рд▓ рдХреЗ рдмреЗрд╣реЛрд╢ рд╣реЛрдиреЗ рдХреА рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реВрдВ - рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдбрд┐рдЬрд╝рд╛рдЗрди рдФрд░ рд▓реЗрдЖрдЙрдЯ рднрдпрд╛рдирдХ рд╣реИрдВ, рдФрд░ Vue.js рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреБрднрд╡реА рдлреНрд░рдВрдЯ-рдПрдВрдб рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЧреЛрд╡рд╛рдиреЛрдХреЙрдб рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЦреИрд░, рд╡рд░реНрддрдиреА рдФрд░ рд╡рд┐рд░рд╛рдо рдЪрд┐рд╣реНрди рдХреЗ рд╕рд╛рде, рдЪреАрдЬреЗрдВ рднреА рдЗрддрдиреА рд╣реИрдВред
рд╕рдВрджрд░реНрдн
рд╡реВрдб + рд╡реБрдХреНрд╕ рдкрд░ рдЯреЛрдбреЛ рдЙрджрд╛рд╣рд░рдгрдмреНрд▓рд╛рдЬрд╝реЛрд░ рдкрд░ рдЯреЛрдбреЛ рдЙрджрд╛рд╣рд░рдгрдкреНрд▓реЗрд╕рдореЗрдВрдЯ рдореЙрдбрд▓
- рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рддрд░рдлред рдПрдХ рдорд╛рдирдХ рдПрд╕рдкреАрдП рдЬрд┐рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ asp.net рдХреЛрд░ рдкрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдиреБрдХрд╕рд╛рди рдЙрди 21 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдореЗрдВ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
- рд╕рд░реНрд╡рд░ рдХреА рддрд░рдлред рд╕рдм рдХреБрдЫ рд╕рд░реНрд╡рд░ рдкрд░ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╕рдорд╛рдкреНрдд рдбреЛрдо рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХреБрдЫ рднреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд▓рдЧрд╛рддрд╛рд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП DOM рдХреЛ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред рдЦреИрд░, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдкрд░ рдкреВрд░рд╛ рд▓реЛрдб рдЕрдЪрд╛рдирдХ рд╕рд░реНрд╡рд░ рдкрд░ рдкрдбрд╝рддрд╛ рд╣реИред
рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЙрди рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХрдВрдкрдиреА рдХреА рдЖрдВрддрд░рд┐рдХ рд╕реВрдЪрдирд╛ рдкреНрд░рдгрд╛рд▓реА рдпрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдмреА 2 рдмреА рд╕рдорд╛рдзрд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмреНрд▓реЗрдЬрд╝рд░ рдкрд╣рд▓реА рдмрд╛рд░ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓рдЧрд╛рддрд╛рд░ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЬреЗрдПрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдпрджрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рд╡рд┐рдЬреНрдЮрд╛рдкрди рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдмрд╕ рдпрд╣ рджреЗрдЦреЗрдВ рдХрд┐ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рд╛рдЗрдЯ рд╣реИ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╡рд╣ рд╕рд╛рдЗрдЯ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдмрд╕ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рджреВрд╕рд░реЗ рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рдпрд╛рдиреАред рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдмреНрд▓реЗрдЬрд╝рд░
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрдорд╛рдг
рдиреЗрдЯ рдХреЛрд░ 3.0
dotnet.microsoft.com/download/dotnet-core/3.0 рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓реЛрдб рдХрд░реЗрдЧрд╛ред
dotnet new -i Microsoft.AspNetCore.Blazor.Templates
рдПрдХ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП
dotnet new blazorserverside -o MyWebApp
рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдХреЗ рд▓рд┐рдП рдЬрд┐рдирдХреА рдлрд╛рдЗрд▓реЗрдВ asp.net рдХреЛрд░ рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рддрд░рд┐рдд рдХреА рдЬрд╛рдПрдВрдЧреА
dotnet new blazorhosted -o MyWebApp
рдпрджрд┐ рдЖрдк рд╡рд┐рджреЗрд╢реАрд╡рд╛рдж рдЪрд╛рд╣рддреЗ рдереЗ рдФрд░ рдЕрдЪрд╛рдирдХ рдПрд╕реНрдкреНрд░реЗрд╕ рдХреЛрд░ рдХреЛ рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдХреБрдЫ рдФрд░ (рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?) рдЖрдк рдЗрд╕ рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рдХреЗ рдмрд┐рдирд╛ рдХреЗрд╡рд▓ рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
dotnet new blazor -o MyWebApp
рдмрд╛рдЗрдВрдбрд┐рдВрдЧ
рдПрдХ-рддрд░рдлрд╝рд╛ рдФрд░ рджреЛ-рддрд░рдлрд╝рд╛ рдмрдВрдзрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рддреЛ рд╣рд╛рдБ, рдЖрдкрдХреЛ WPF рдХреА рддрд░рд╣ рдХрд┐рд╕реА рднреА OnPropertichanged рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рджреГрд╢реНрдп рдореЙрдбрд▓ рдмрджрд▓рддреЗ рд╕рдордп, рд▓реЗрдЖрдЙрдЯ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред
<label>One way binding:</label> <br /> <input type="text" value=@Text /> <br /> <label>Two way binding:</label> <br /> <input type="text" @bind=@Text /> <br /> <label>Two way binding Text oninput:</label> <br /> <input type="text" @bind=@Text @bind:event="oninput" />
рдФрд░ рдЗрд╕рд▓рд┐рдП, рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ ViewModel (рдЕрдирд╛рдо) рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рд╣реИред
рдкрд╣рд▓реЗ рдЗрдирдкреБрдЯ рдореЗрдВ, "value = @ Text" рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдордиреЗ рдПрдХ рддрд░рдлрд╝рд╛ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдмрдирд╛рдпрд╛ред рдЕрдм рдЬрдм рд╣рдо рдХреЛрдб рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЗрдирдкреБрдЯ рдХреЗ рдЕрдВрджрд░ рдХрд╛ рдЯреЗрдХреНрд╕реНрдЯ рддреБрд░рдВрдд рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред рдХреЗрд╡рд▓ рдЗрддрдирд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдЗрдирдкреБрдЯ рдореЗрдВ рдкреНрд░рд┐рдВрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╣рдорд╛рд░реЗ рд╡реАрдПрдо рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рджреВрд╕рд░реЗ рдЗрдирдкреБрдЯ рдореЗрдВ, "@ рдмрд╛рдЗрдВрдб = @ рдЯреЗрдХреНрд╕реНрдЯ" рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдордиреЗ рджреЛ-рддрд░рдлрд╝рд╛ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдмрдирд╛рдпрд╛ред рдЕрдм рдЕрдЧрд░ рд╣рдо рдЕрдкрдиреЗ рдЗрдирдкреБрдЯ рдореЗрдВ рдХреБрдЫ рдирдпрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░рд╛ VM рддреБрд░рдВрдд рдмрджрд▓ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рднреА рд╕рд╣реА рд╣реИ рдЕрд░реНрдерд╛рддреНред рдпрджрд┐ рд╣рдо рдХреЛрдб рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░рд╛ рдЗрдирдкреБрдЯ рддреБрд░рдВрдд рдирдП рдореВрд▓реНрдп рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рдПрдХ BUT рд╣реИ - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдкрд░рд┐рд╡рд░реНрддрди рд╣рдорд╛рд░реЗ рдЗрдирдкреБрдЯ рдХреЗ рдСрдирдХреЙрдиреНрдЧ рдЗрд╡реЗрдВрдЯ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЬрдм рд╣рдо рдЗрдирдкреБрдЯ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВрдЧреЗ рддрднреА VM рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред рддреАрд╕рд░реЗ рдЗрдирдкреБрдЯ "@bind: event =" oninput "" рдореЗрдВ рд╣рдордиреЗ рд╡реАрдПрдо рдбреЗрдЯрд╛ рдХреЛ рдСрдирд┐рдирдкреБрдЯ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдШрдЯрдирд╛ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ рдЕрдм рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо рдХреБрдЫ рд╡рд░реНрдг рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдорд╛рд░реЗ рд╡реАрдПрдо рдХреЛ рддреБрд░рдВрдд рдПрдХ рдирдпрд╛ рдореВрд▓реНрдп рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрдЯрд╛рдЗрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╛рд░реВрдк рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
<input @bind=@Today @bind:format="yyyy-MM-dd" />
рдореЙрдбрд▓ рджреЗрдЦреЗрдВ
рдЖрдк рдЗрд╕реЗ рдЕрдирд╛рдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд┐рд░ рдЖрдкрдХреЛ рдЗрд╕реЗ "@code {}" рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рд░реЛрдХрдирд╛ рд╣реЛрдЧрд╛
@page "/todo" <p> @UserName </p> @code{ public string UserName{get; set;} }
рдпрд╛ рдЖрдк рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рддрдм рдЗрд╕реЗ ComponentBase рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдкреГрд╖реНрда рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ "@inits" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдорд╛рд░реЗ VM рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
TodoViewModel.cs:
public class TodoViewModel: ComponentBase{ public string UserName{get; set;} }
Todo.razor:
@page "/todo" @inherits MyWebApp.ViewModels.TodoViewModel <p> @UserName </p>
рдорд╛рд░реНрдЧ
рдЙрди рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкреГрд╖реНрда рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдВрдЧреЗ, рдкреГрд╖реНрда рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ "@ рдкреГрд╖реНрда" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдВрдЧрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдИ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреЛ рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рддрдХ рдХреЗ рдХреНрд░рдо рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реБрдП рдЪреБрдирд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
@page "/todo" @page "/todo/delete" <h1> Hello!</h1>
рдпрд╣ рдкреГрд╖реНрда "/ todo" рдпрд╛ "todo / delete" рдкрд░ рдЦреБрд▓реЗрдЧрд╛
Layauty
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХрдИ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдЪреАрдЬреЗрдВ рдЖрдорддреМрд░ рдкрд░ рдпрд╣рд╛рдВ рд░рдЦреА рдЬрд╛рддреА рд╣реИрдВред рдПрдХ рд╕рд╛рдЗрдбрдмрд╛рд░ рдХреА рддрд░рд╣, рдФрд░ рдЕрдзрд┐рдХред
рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ рд▓реЗрдЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕реЗ "@inherits" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ LayotComponentBase рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
@inherits LayoutComponentBase <div class="sidebar"> <NavMenu /> </div> <div class="main"> <div class="top-row px-4"> <a href="http://blazor.net" target="_blank" class="ml-md-auto">About</a> </div> <div class="content px-4"> @Body </div> </div>
рджреВрд╕рд░реЗ, рдЗрд╕реЗ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ, рдЖрдкрдХреЛ _imports.razor рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ "@layout" рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ
@layout MainLayout @using System
рддреАрд╕рд░рд╛, рдЖрдк рдЙрд╕ рдкреГрд╖реНрда рдкрд░ рд╕рдВрдХреЗрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рд▓реЗрдЖрдЙрдЯ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
@layout MainLayout @page "/todo" @inherits BlazorApp.Client.Presentation.TodoViewModel <h3>Todo</h3>
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, _imports.razor рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдкрд░ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реИрдВред
рдорд╛рд░реНрдЧ рд╡рд┐рдХрд▓реНрдк
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдорд╛рд░реЗ рдорд╛рд░реНрдЧ (рдХреЗрд╕ рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓) рдореЗрдВ рдШреБрдВрдШрд░рд╛рд▓реЗ рдХреЛрд╖реНрдардХ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдЙрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВред рдорд╛рдирдХ рдкреНрд░рдХрд╛рд░ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред рддреЛ рд╣рд╛рдВ, рдХреЛрдИ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреНред рдорд╛рди рд╣рдореЗрд╢рд╛ рдкрд╛рд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдорд╛рди рд╣рдорд╛рд░реЗ ViewModel рдореЗрдВ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ [Parameter] BTB рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдмрдирд╛рдХрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдкрд╣рд▓реЗ рдЪрд▓ рд░рд╣рд╛ рд╣реИ - рдореВрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдбреЗрдЯрд╛ рдФрд░ рдИрд╡реЗрдВрдЯреНрд╕ рднреА Par Parameter [Parameter] рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдХреИрд╕реНрдХреЗрдбрд┐рдВрдЧ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╡реЗ рдореВрд▓ рдШрдЯрдХ рд╕реЗ рдЙрд╕рдХреЗ рд╕рднреА рдмрд╛рд▓ рдШрдЯрдХреЛрдВ рдФрд░ рдЙрдирдХреЗ рдмрд╛рд▓ рдШрдЯрдХреЛрдВ рдореЗрдВ рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рд╡реЗ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл CSS рдореЗрдВ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИред
@page "/todo/delete/{id:guid}" <h1> Hello!</h1> @code{ [Parameter] public Guid Id { get; set; } }
рдбрд┐
рд╕рдм рдХреБрдЫ Startup.cs рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рдирд┐рдпрдорд┐рдд asp.net рдХреЛрд░ рдПрдкреНрд▓реАрдХреЗрд╢рди рдореЗрдВ рд╣реИред рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдирдпрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рд╡реАрдПрдо рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрднреА рднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЧреБрдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИ рди рдХрд┐ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдХреЗрд╡рд▓ [Inject] рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗ рд╕рдЬрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
public class DeleteTodoViewModel : ComponentBase { [Parameter] private Guid Id { get; set; } [Inject] public ICommandDispatcher CommandDispatcher { get; set; }
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, 3 рд╕реЗрд╡рд╛рдПрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИрдВред HttpClient - рдареАрдХ рд╣реИ, рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпреЛрдВред IJSRuntime - C # рд╕реЗ JS рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред IUriHelper - рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рдкреГрд╖реНрдареЛрдВ рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред
рдЖрд╡реЗрджрди рдЙрджрд╛рд╣рд░рдг
рдЯреЛрдбреЛ рд╕реНрдкреНрд░реЗрдбрд╢реАрдЯ
TodoTableComponent.razor:
- рдЗрд╕ рдШрдЯрдХ рдХреЗ рдмрд╛рдж рд╕реЗ рд╣рдореЗрдВ "@ рдкреГрд╖реНрда" рдФрд░ "@layout" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд░реВрдЯрд┐рдВрдЧ рдореЗрдВ рднрд╛рдЧ рдирд╣реАрдВ рд▓реЗрдЧрд╛ рдФрд░ рдпрд╣ рдореВрд▓ рдШрдЯрдХ рд╕реЗ рд▓реЗрдЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛
- C # рдХреЛрдб рдХреА рд╢реБрд░реБрдЖрдд @ рд╕рд┐рдВрдмрд▓ рд╕реЗ рд╣реЛрддреА рд╣реИред рдЕрд╕рд▓ рдореЗрдВ рд░реЗрдЬрд░ рдореЗрдВ рднреА рдРрд╕рд╛ рд╣реА рд╣реИ
@onclick=@(()=>ClickRow(item.Id))
рд╣рдорд╛рд░реЗ ViewModel рдХреЗ ClickRow рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрдВрдХреНрддрд┐ рдХреНрд▓рд┐рдХ рдШрдЯрдирд╛ рдХреЛ рдмрд╛рдВрдзрддрд╛ рд╣реИ- рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдХрд┐ рдХрд┐рди рдкреИрд░рд╛рдореАрдЯрд░реЛрдВ рдХреЛ рдореВрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдпрд╛ рдкреГрд╖реНрда рд╕реЗ рд╣рдорд╛рд░реЗ [рдкреИрд░рд╛рдореАрдЯрд░] рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
- рд╣рдо рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдореВрд▓ рдШрдЯрдХ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рдерд╛ред рддреЛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдШрдЯрдХ рдХреЛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдмрдЪреНрдЪреЗ рдореЗрдВ рдХреБрдЫ рдШрдЯрдирд╛ рдШрдЯреА рд╣реИред рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдХреЗрд╡рд▓ EventCallback <> рдкреИрд░рд╛рдореАрдЯрд░рд╛рдЗрдЬрд╝реНрдб EventArgs рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред EventArgs рдХреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕реВрдЪреА рдпрд╣рд╛рдВ рджреЗрдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИ - docs.microsoft.com/ru-ru/aspnet/core/blazor/compenders?view=aspnetcore-3.0#event-handling
- рдЪреВрдВрдХрд┐ EventArgs рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╕реВрдЪреА рд╕реАрдорд┐рдд рд╣реИ рдФрд░ рд╣рдореЗрдВ рдореВрд▓ рдШрдЯрдХ рдХреЗ рдХрд┐рдирд╛рд░реЗ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд Id рдЧреБрдг рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд░реНрдЧ рдХреЛ рдЖрдзрд╛рд░ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдШрдЯрдирд╛ рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рддреЛ рд╣рд╛рдБ - рдореВрд▓ рдШрдЯрдХ рдореЗрдВ, рдирд┐рдпрдорд┐рдд UIMouseEventArgs рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЙрдбрд╝ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдСрдкрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ
рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:
<TodoTableComponent Items=@Items OnClick=@Select Current=@(Selected?.Id??Guid.Empty)></TodoTableComponent>
рдЯреЛрдбреЛ рд╣рдЯрд╛рдирд╛ рдкреГрд╖реНрда
рд╣рдорд╛рд░рд╛ ViewModel рдЙрд░реНрдл тАЛтАЛVM DeleteTodoViewModel.cs рд╣реИ:
public class DeleteTodoViewModel : ComponentBase {
- рдорд╛рд░реНрдЧ рдкреИрд░рд╛рдореАрдЯрд░ "/ рдЯреВрдбреВ / рдбрд┐рд▓реАрдЯ / {рдЖрдИрдбреА: рдЧрд╛рдЗрдб}" рдпрд╣рд╛рдВ рд╕реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рд╣рдо рдЬрд╛рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ / рдЯреВрдбреВ / рдбрд┐рд▓реАрдЯ / ae434aae44 ...
- рд╣рдорд╛рд░реЗ рд╡реАрдПрдо рдореЗрдВ рдбреАрдЖрдИ рдХрдВрдЯреЗрдирд░ рд╕реЗ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░реЗрдВред
- рдмрд╕ рд╣рдорд╛рд░реЗ рд╡реАрдПрдо рдХреА рдПрдХ рд╕рдВрдкрддреНрддрд┐ред рд╣рдо рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рд╕реНрд╡рдпрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВред
- рдкреЗрдЬ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдпрд╣ рд╡рд┐рдзрд┐ рдЕрдкрдиреЗ рдЖрдк рдХрд╣рд▓рд╛рддреА рд╣реИред рдпрд╣рд╛рдВ рд╣рдо рдЕрдкрдиреЗ рд╡реАрдПрдо рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдорд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ
- рд╣рдорд╛рд░реЗ рд╡реАрдПрдо рдХреА рд╡рд┐рдзрд┐ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рджреГрд╢реНрдп рдХреЗ рдХрд┐рд╕реА рднреА рдмрдЯрди рдХреЛ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣рдо рдЗрд╕реЗ рдмрд╛рдВрдз рд╕рдХрддреЗ рд╣реИрдВ
- "/ Todo" рдХреЗ рдкрддреЗ рдкрд░ рд╕реНрдерд┐рдд рджреВрд╕рд░реЗ рдкреГрд╖реНрда рдкрд░ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд▓рд╛рдЗрди "@page" / todo "" рд╣реИ
рд╣рдорд╛рд░рд╛ рджреГрд╢реНрдп DeleteTodo.razor рд╣реИ:
- рд╣рдо рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рджреЗрд╢ рд╣рдорд╛рд░реА рд╕рд╛рдЗрдЯ рдХреЗ рдкрддреЗ {рд░реВрдЯ рдПрдбреНрд░реЗрд╕} + "/ рдЯреВрдбреВ / рдбрд┐рд▓реАрдЯ /" + {рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рдЧрд╛рдЗрдб} рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ / рдЯреВрдбреВ / рдбрд┐рд▓реАрдЯ / ae434aae44 ...
- рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдкреЗрдЬ MainLayout.razor рдХреЗ рдЕрдВрджрд░ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
- рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдкреГрд╖реНрда DeleteTodoViewModel рд╡рд░реНрдЧ рдХреЗ рдЧреБрдгреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛
- рд╣рдо рд╕рдВрдХреАрд░реНрдг рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рдЖрдк рдЗрд╕ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ VM рдХрд╛ рдбрд┐рд▓реАрдЯ () рддрд░реАрдХрд╛ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛
рдЯреЛрдбреЛ рд╣реЛрдо
TodoViewModel.cs:
public class TodoViewModel : ComponentBase { [Inject] public ICommandDispatcher CommandDispatcher { get; set; } [Inject] public IQueryDispatcher QueryDispatcher { get; set; }
- System.ComponentModel.DataAnnotations рд╕реЗ рдорд╛рдирдХ рд╕рддреНрдпрд╛рдкрди рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣рд╛рдВ рд╣рдо рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдкрд╛рда рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдореЗрдВ рдПрдХ рдореВрд▓реНрдп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрдЧрд╛ред
- рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдШрдЯрдирд╛ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ред рдпрд╣ рд╡рд┐рдзрд┐ рдмрдЪреНрдЪреЗ рдХреЗ рдШрдЯрдХ рд╕реЗ рдШрдЯрдирд╛ рдХреЛ рд╕рдВрднрд╛рд▓ рд▓реЗрдЧреАред
- рд╣рдо рдЙрд╕ рддрд░реНрдХ рдХреЛ рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдордиреЗ рдЪрд╛рдЗрд▓реНрдб рдХрдВрдкреЛрдиреЗрдВрдЯ рдореЗрдВ рдмрдирд╛рдпрд╛ рдерд╛
Todo.razor:
@layout MainLayout @page "/todo" @inherits BlazorApp.Client.Presentation.TodoViewModel <h3>Todo</h3> <h4></h4> <div class="row"> <div class="col"> @if (Items == null) { <p><em>...</em></p> } else if (Items.Count == 0) { <p><em> . .</em></p> } else {
- рд╣рдо рдмрдЪреНрдЪреЗ рдХреЗ рдШрдЯрдХ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рд╡реАрдПрдо рдХреЗ рдЧреБрдгреЛрдВ рдФрд░ рддрд░реАрдХреЛрдВ рдХреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
- рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рд╛рде рдШрдЯрдХред рд╣рдо рдЗрд╕рдореЗрдВ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдореЙрдбрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╣ рд╣рдорд╛рд░реЗ рд╡реАрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ рдФрд░ рд╡реИрдз рдбреЗрдЯрд╛ рднреЗрдЬрддреЗ рд╕рдордп рд╡рд╣ рдЗрд╕рдХреА рдХреНрд░рд┐рдПрдЯ () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛
- [рдЖрд╡рд╢реНрдпрдХ] рдЖрджрд┐ рдЬреИрд╕реЗ рдореЙрдбрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рддреНрдпрд╛рдкрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
- рдпрд╣рд╛рдВ рдореИрдВ рд╕рддреНрдпрд╛рдкрди рдХреА рд╕рд╛рдорд╛рдиреНрдп рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реВрдВрдЧрд╛
- рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рд╛рде рдЗрдирдкреБрдЯ рдмрдирд╛рдПрдВрдЧреЗред рд╕рдВрднрд╛рд╡рд┐рдд рдЯреИрдЧреНрд╕ рдХреА рд╕реВрдЪреА InputText, InputTextArea, InputSelect, InputNumber, InputCheckbox, InputTate
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░реЙрдкрд░реНрдЯреА NewTodo {get; рд╕реЗрдЯ;} рдХреЗ рд▓рд┐рдП рд╕рддреНрдпрд╛рдкрди рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдпрд╣рд╛рдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рдПрдВрдЧреА
- рдЬрдм рдЖрдк рдЗрд╕ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдлреЙрд░реНрдо рдХреА OnValidSubmit рдШрдЯрдирд╛ рдХреЛ рдЙрдард╛рдпрд╛ рдЬрд╛рдПрдЧрд╛
Startup.cs рдлрд╝рд╛рдЗрд▓
рдпрд╣рд╛рдВ рд╣рдо рдЕрдкрдиреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ
public class Startup { public void ConfigureServices(IServiceCollection services) {
рдЙрдкрд╕рдВрд╣рд╛рд░
рдпрд╣ рд▓реЗрдЦ рдПрдХ рднреВрдЦ рдЦреЗрд▓рдиреЗ рдФрд░ рдмреНрд▓реЗрдЬрд╝рд░ рдХреЗ рдЖрдЧреЗ рдХреЗ рдЕрдзреНрдпрдпрди рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдирд╛ рд▓рдХреНрд╖реНрдп рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред рдЦреИрд░, рдЗрд╕рдХрд╛ рдмреЗрд╣рддрд░ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ Microsoft рд╕реЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдореИрдиреБрдЕрд▓ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред
рдзрдиреНрдпрд╡рд╛рдж
рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдорд┐рд▓реА рд╡рд░реНрддрдиреА рдФрд░ рд╡реНрдпрд╛рдХрд░рдг рд╕рдВрдмрдВрдзреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдВрдбреНрд░реАрдирд┐рдХреЛрд▓рд┐рди , win32nipuh , SemenPV рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред