SlideShare a Scribd company logo
1 of 58
Ed Charbeneau
my name is
HELLO
• Razor (syntax)
• Razor Views
• Html Helpers
• Razor Pages
• Tag Helpers
• View Components
• Blazor
• Razor Components
Razor-verse
Terminology or technology?
??
??
??
??
??
??
ASP.NET Razor
The Razor syntax is a template markup
syntax, based on the C# programming
language
ASP.NET Razor
• Introduced July 2010 by Scott Guthrie
• Shipped January 2011 with Visual Studio
2010
• Improve the template experience
<ul>
<% foreach (p in people) { %>
<li><% p.Name %></li>
<% } %>
</ul>
WebForms
Why Razor?
<ul>
@foreach (p in people)
{
<li>@p.Name</li>
}
</ul>
Razor
<ul>
<li *ngFor="let p of person">
{{c.name}}
</li>
</ul>
Angular
Compare
<ul>
@foreach (p in people)
{
<li>@p.Name</li>
}
</ul>
Razor
@{
var greeting = "Hello";
}
<p>@greeting</p>
@{
greeting = "Howdy";
}
<p>@greeting</p>
IN
Razor Syntax: Code Blocks
<p>Hello</p>
<p>Howdy</p>
Out: HTML
<span>@( 5 + 10 + 20 )</span>
IN
Razor Syntax: Complex Expression
<span>35</span>
Out: HTML
@if (value % 2 == 0)
{
<p>The value was even.</p>
}
else if (value >= 1337)
{
<p>The value is large.</p>
}
else
{
<p>The value is odd and small.</p>
}
cshtml
Razor Syntax: @if
Razor Syntax: Control structures
Keyword
Try catch
While
For
Foreach
If
Do while
Ternary (?: operator)
Razor Syntax: Directives
@using adds C# using directive to view
@inherits view class
@inject inject service
@functions add C# code block to a view
Razor Complexities
Rendering
• Generating C# code from the template
• Compiling the C# code into an assembly
• Loading the assembly into memory
• Executing your compiled template
// Not real code
var engine = new Razor();
var result = engine.RenderTemplate(path);
Fail
Razor For Templates?
Razor Complexities
Tightly Coupled to ASP.NET
• IView
• HtmlEncoder
• TextWriter
• HttpContext
1 var engine = new RazorLightEngineBuilder()
2 .UseMemoryCachingProvider()
3 .Build();
4
5 string template = "Hello, @Model.Name. Welcome to RazorLight repository";
6 ViewModel model = new ViewModel() { Name = "John Doe" };
7
8 string result = await engine.CompileRenderAsync(“uid", template, model);
RazorLight
Razor For Templates?
• Razor (syntax)
• Razor Views
• Html Helpers
• Razor Pages
• Tag Helpers
• View Components
• Blazor
• Razor Components
Razor-verse
Terminology or technology?
??
??
??
??
??
??
Razor views (cshtml)
• Streamlined for code-focused templating
• Returned from a controller Action as a ViewResult
• Content is made of
– HTML
– HTML Helpers *typical
– Tag Helpers *new
– Razor Components *bleeding edge
<ul>
<% foreach (p in people) { %>
<li><% p.Name %></li>
<% } %>
</ul>
WebForms
ASP.NET MVC View engines
<ul>
@foreach (p in people)
{
<li>@p.Name</li>
}
</ul>
Razor
Razor Syntax: Directives
@model model type for view
@section enable views to render content to
parts of page
@addTagHelper adds a Tag Helper to scope (.NET Core)
• Razor (syntax)
• Razor Views
• Html Helpers
• Razor Pages
• Tag Helpers
• View Components
• Blazor
• Razor Components
Razor-verse
Terminology or technology?
??
??
??
??
??
??
HTML Helpers
• Invoked as methods within HTML in Razor views
• Incapsulates a block of HTML and Razor Code
• Produces an HTML string
HTML Helpers
Html.ActionLink()
Html.BeginForm()
Html.CheckBox()
Html.DropDownList()
Html.EndForm()
Html.Hidden()
Html.ListBox()
Html.Password()
Html.RadioButton()
Html.TextArea()
Html.TextBox()
@Html.ActionLink("Create New", "Create")
In
HTML Helper Usage
<a href="/Student/Create">Create New</a>
Out
Creating HTML Helpers
• Extends IHtmlHelper as an extension method
• Returns IHtmlContent
Func<IHtmlHelper, IHtmlContent>
(extension) IHtmlContent Func(this IHtmlHelper htmlHelper)
Signature
Custom HTML Helper
public static IHtmlContent BeerCity(this IHtmlHelper htmlHelper)
=> new HtmlString("<img src=/img/fulllogo.png />");
Example
• Razor (syntax)
• Razor Views
• Html Helpers
• Razor Pages
• Tag Helpers
• View Components
• Blazor
• Razor Components
Razor-verse
Terminology or technology?
??
??
??
??
??
??
Razor Pages
• Introduced in ASP.NET Core
• Page-focused approach incorporates its own
Controller/Action/Routing
• Can integrate with MVC
• Content is made of:
– HTML
– Tag Helpers *typical
– HTML Helpers *compatible
– Razor Components *bleeding edge
MVC vs. Razor Pages
@page
@model IndexModel
<h2>Separate page model</h2>
<p>
@Model.Message
</p>
Signature
Custom HTML Helper
public class IndexModel : PageModel
{
public string Message
{
get;
private set;
} = "PageModel in C#";
public void OnGet()
{
Message += $"Server time is { DateTime.Now }";
}
}
Example
• Razor (syntax)
• Razor Views
• Html Helpers
• Razor Pages
• Tag Helpers
• View Components
• Blazor
• Razor Components
Razor-verse
Terminology or technology?
??
??
??
??
??
??
Tag Helpers
• Async server-side processing via HTML elements
• Use HTML’like Tags and Attributes
• Eliminate context switching between HTML and C#
• Designed for Unit Testing
@Html.Label(“Name”, “First Name:”, new { @class = “caption” })
Signature
HTML Helpers vs. Tag Helpers
<label asp-for=“Name” class=“caption”>First Name:</label>
Example
@(Html.Kendo().Grid<Customer>().Name("grid")
.Columns(columns =>
{
columns.Bound(c => c.ContactName);
columns.Bound(c => c.ContactTitle);
columns.Bound(c => c.CompanyName);
columns.Bound(c => c.Country);
})
HTML Helpers vs. Tag Helpers
<kendo-grid name="grid" height="550">
<columns>
<column field="ContactName" title="Contact Name" />
<column field="ContactTitle" title="Contact Title" />
<column field="CompanyName" title="Company Name" />
<column field="Country" title="Country“ />
</columns>
</kendo-grid>
Tag Helper Directives
@addTagHelper Component, NameSpace Adds a Tag Helper to scope
@addTagHelper *, Kendo.Mvc Ex: 3rd party Tag Helpers
@removeTagHelper Component, Namespace Removes a Tag Helper from scope
@tagHelperPrefix th: Prefixes Tag Helpers ex: <th:myWidget>
Built-in ASP.NET Core Tag Helpers
• Anchor
• Cache
• Distributed Cache
• Environment
• Form
• Form Action
• Image
• Input
• Label
• Partial
• Select
• Textarea
• Validation Message
• Validation Summary
Tag Helpers: Example
<kendo-datepicker name="startDate"
start="CalendarView.Year"
depth="CalendarView.Year"
format="MMMM yyyy"
value='DateTime.Parse("May 2019")' />
• Razor (syntax)
• Razor Views
• Html Helpers
• Razor Pages
• Tag Helpers
• View Components
• Blazor
• Razor Components
Razor-verse
Terminology or technology?
??
??
??
??
??
??
View Components
• Renders a chunk rather than a whole response
• Similarities with controller and view
• Can have parameters and business logic
• Is typically invoked from a layout page
• Deprecated by Razor Components??
List Items From Database
<vc:priority-list max-priority="2"
is-done="false">
</vc:priority-list>
• Razor (syntax)
• Razor Views
• Html Helpers
• Razor Pages
• Tag Helpers
• View Components
• Blazor
• Razor Components
Razor-verse
Terminology or technology?
??
??
??
??
??
??
Razor Component (Blazor Framework)
• Razor Syntax
• Component Architecture vs. HTML generator
• Creates a RenderTree (DOM Abstraction)
• Similar to JSX for React
• Uses .razor file extension
• .razor files are used for code generation of .NET
classes
– These classes implement a RenderTree
Browser
JavaScript (.js)
Parser
Compiler
JIT Interpreter
Native Web APIs
(DOM, file storage, etc)
HTML (.html)
Inline JS
JavaScriptRuntime
AST
Byte code
WebAssembly (.wasm)
Compiler
PUBLISHING
COMPONENT MODEL FORMS & VALIDATION
DEPENDENCY INJECTION
AUTO REBUILDUNIT TESTING
JAVASCRIPT INTEROP
SERVER-SIDE RENDERING
DEBUGGING
INTELLISENSE & TOOLING
LAYOUTS
ASSEMBLY TRIMMING
COMPONENT PACKAGES
ROUTING
Blazor
• What it is
• Client Side C#
• Web Standard Technologies
• Mono Runtime for
WebAssembly
• .NET Standard
• What it’s NOT
• A Plugin
• ASP.NET WebForms
• Silverlight
• Trans-piled JavaScript
Browser
Parser
Compiler
JIT Interpreter
Native Web APIs
(DOM, file storage, etc)
JavaScriptRuntime
AST
Byte code
blazor.js
mono.wasm
Bootstrapping HTML
mono.js
netstandard.dll app.dll
Interop layer
Blazor Components (.razor)
Schedule
• demos.telerik.com/blazor
• Blazor.net
• EdCharbeneau.com
• BlazorPro.com
Resources

More Related Content

What's hot

Polymer and web component
Polymer and web componentPolymer and web component
Polymer and web componentImam Raza
 
Custom Elements with Polymer Web Components #econfpsu16
Custom Elements with Polymer Web Components #econfpsu16Custom Elements with Polymer Web Components #econfpsu16
Custom Elements with Polymer Web Components #econfpsu16John Riviello
 
BP101: A Modernized Workflow w/ Domino/XPages
BP101: A Modernized Workflow w/ Domino/XPagesBP101: A Modernized Workflow w/ Domino/XPages
BP101: A Modernized Workflow w/ Domino/XPagesedm00se
 
How to build a web application with Polymer
How to build a web application with PolymerHow to build a web application with Polymer
How to build a web application with PolymerSami Suo-Heikki
 
Stencil the time for vanilla web components has arrived
Stencil the time for vanilla web components has arrivedStencil the time for vanilla web components has arrived
Stencil the time for vanilla web components has arrivedGil Fink
 
Polymer - Welcome to the Future @ PyGrunn 08/07/2014
Polymer - Welcome to the Future @ PyGrunn 08/07/2014Polymer - Welcome to the Future @ PyGrunn 08/07/2014
Polymer - Welcome to the Future @ PyGrunn 08/07/2014Spyros Ioakeimidis
 
Polymer / WebComponents
Polymer / WebComponentsPolymer / WebComponents
Polymer / WebComponentsArnaud Kervern
 
Web components the future is here
Web components   the future is hereWeb components   the future is here
Web components the future is hereGil Fink
 
Introduction to Web Components
Introduction to Web ComponentsIntroduction to Web Components
Introduction to Web ComponentsRich Bradshaw
 
Introduction to Web Components
Introduction to Web ComponentsIntroduction to Web Components
Introduction to Web ComponentsFu Cheng
 
Polymer
Polymer Polymer
Polymer jskvara
 
The rise of Polymer and Web Components (Kostas Karolemeas) - GreeceJS #17
The rise of Polymer and Web Components (Kostas Karolemeas) - GreeceJS #17The rise of Polymer and Web Components (Kostas Karolemeas) - GreeceJS #17
The rise of Polymer and Web Components (Kostas Karolemeas) - GreeceJS #17GreeceJS
 
Building a Secure App with Google Polymer and Java / Spring
Building a Secure App with Google Polymer and Java / SpringBuilding a Secure App with Google Polymer and Java / Spring
Building a Secure App with Google Polymer and Java / Springsdeeg
 
HTML5와 오픈소스 기반의 Web Components 기술
HTML5와 오픈소스 기반의 Web Components 기술HTML5와 오픈소스 기반의 Web Components 기술
HTML5와 오픈소스 기반의 Web Components 기술Jeongkyu Shin
 
Александр Кашеверов - Polymer
Александр Кашеверов - PolymerАлександр Кашеверов - Polymer
Александр Кашеверов - PolymerDataArt
 
NextJS, A JavaScript Framework for building next generation SPA
NextJS, A JavaScript Framework for building next generation SPA  NextJS, A JavaScript Framework for building next generation SPA
NextJS, A JavaScript Framework for building next generation SPA Pramendra Gupta
 

What's hot (20)

Polymer and web component
Polymer and web componentPolymer and web component
Polymer and web component
 
Custom Elements with Polymer Web Components #econfpsu16
Custom Elements with Polymer Web Components #econfpsu16Custom Elements with Polymer Web Components #econfpsu16
Custom Elements with Polymer Web Components #econfpsu16
 
BP101: A Modernized Workflow w/ Domino/XPages
BP101: A Modernized Workflow w/ Domino/XPagesBP101: A Modernized Workflow w/ Domino/XPages
BP101: A Modernized Workflow w/ Domino/XPages
 
How to build a web application with Polymer
How to build a web application with PolymerHow to build a web application with Polymer
How to build a web application with Polymer
 
Stencil the time for vanilla web components has arrived
Stencil the time for vanilla web components has arrivedStencil the time for vanilla web components has arrived
Stencil the time for vanilla web components has arrived
 
Polymer - Welcome to the Future @ PyGrunn 08/07/2014
Polymer - Welcome to the Future @ PyGrunn 08/07/2014Polymer - Welcome to the Future @ PyGrunn 08/07/2014
Polymer - Welcome to the Future @ PyGrunn 08/07/2014
 
Polymer / WebComponents
Polymer / WebComponentsPolymer / WebComponents
Polymer / WebComponents
 
Web components the future is here
Web components   the future is hereWeb components   the future is here
Web components the future is here
 
Booting up with polymer
Booting up with polymerBooting up with polymer
Booting up with polymer
 
Introduction to Web Components
Introduction to Web ComponentsIntroduction to Web Components
Introduction to Web Components
 
Blazor introduction
Blazor introductionBlazor introduction
Blazor introduction
 
Introduction to Web Components
Introduction to Web ComponentsIntroduction to Web Components
Introduction to Web Components
 
Polymer
Polymer Polymer
Polymer
 
The rise of Polymer and Web Components (Kostas Karolemeas) - GreeceJS #17
The rise of Polymer and Web Components (Kostas Karolemeas) - GreeceJS #17The rise of Polymer and Web Components (Kostas Karolemeas) - GreeceJS #17
The rise of Polymer and Web Components (Kostas Karolemeas) - GreeceJS #17
 
Building a Secure App with Google Polymer and Java / Spring
Building a Secure App with Google Polymer and Java / SpringBuilding a Secure App with Google Polymer and Java / Spring
Building a Secure App with Google Polymer and Java / Spring
 
Blazor v1.1
Blazor v1.1Blazor v1.1
Blazor v1.1
 
Web Components
Web ComponentsWeb Components
Web Components
 
HTML5와 오픈소스 기반의 Web Components 기술
HTML5와 오픈소스 기반의 Web Components 기술HTML5와 오픈소스 기반의 Web Components 기술
HTML5와 오픈소스 기반의 Web Components 기술
 
Александр Кашеверов - Polymer
Александр Кашеверов - PolymerАлександр Кашеверов - Polymer
Александр Кашеверов - Polymer
 
NextJS, A JavaScript Framework for building next generation SPA
NextJS, A JavaScript Framework for building next generation SPA  NextJS, A JavaScript Framework for building next generation SPA
NextJS, A JavaScript Framework for building next generation SPA
 

Similar to Razor into the Razor'verse

The Django Web Application Framework 2
The Django Web Application Framework 2The Django Web Application Framework 2
The Django Web Application Framework 2fishwarter
 
The Django Web Application Framework 2
The Django Web Application Framework 2The Django Web Application Framework 2
The Django Web Application Framework 2fishwarter
 
The Django Web Application Framework 2
The Django Web Application Framework 2The Django Web Application Framework 2
The Django Web Application Framework 2fishwarter
 
The Django Web Application Framework 2
The Django Web Application Framework 2The Django Web Application Framework 2
The Django Web Application Framework 2fishwarter
 
DIWE - Coding HTML for Basic Web Designing
DIWE - Coding HTML for Basic Web DesigningDIWE - Coding HTML for Basic Web Designing
DIWE - Coding HTML for Basic Web DesigningRasan Samarasinghe
 
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5Sadaaki HIRAI
 
Web Development Course - HTML5 & CSS3 by RSOLUTIONS
Web Development Course - HTML5 & CSS3 by RSOLUTIONSWeb Development Course - HTML5 & CSS3 by RSOLUTIONS
Web Development Course - HTML5 & CSS3 by RSOLUTIONSRSolutions
 
HTML - hypertext markup language
HTML - hypertext markup languageHTML - hypertext markup language
HTML - hypertext markup languageBasmaa Mostafa
 
HTML CSS and Web Development
HTML CSS and Web DevelopmentHTML CSS and Web Development
HTML CSS and Web DevelopmentRahul Mishra
 
MVC & SQL_In_1_Hour
MVC & SQL_In_1_HourMVC & SQL_In_1_Hour
MVC & SQL_In_1_HourDilip Patel
 
Introduction of Html/css/js
Introduction of Html/css/jsIntroduction of Html/css/js
Introduction of Html/css/jsKnoldus Inc.
 
A quick guide to Css and java script
A quick guide to Css and  java scriptA quick guide to Css and  java script
A quick guide to Css and java scriptAVINASH KUMAR
 
C# Advanced L09-HTML5+ASP
C# Advanced L09-HTML5+ASPC# Advanced L09-HTML5+ASP
C# Advanced L09-HTML5+ASPMohammad Shaker
 
Html5, a gentle introduction
Html5, a gentle introduction Html5, a gentle introduction
Html5, a gentle introduction Diego Scataglini
 
Web development basics (Part-1)
Web development basics (Part-1)Web development basics (Part-1)
Web development basics (Part-1)Rajat Pratap Singh
 

Similar to Razor into the Razor'verse (20)

The Django Web Application Framework 2
The Django Web Application Framework 2The Django Web Application Framework 2
The Django Web Application Framework 2
 
The Django Web Application Framework 2
The Django Web Application Framework 2The Django Web Application Framework 2
The Django Web Application Framework 2
 
The Django Web Application Framework 2
The Django Web Application Framework 2The Django Web Application Framework 2
The Django Web Application Framework 2
 
The Django Web Application Framework 2
The Django Web Application Framework 2The Django Web Application Framework 2
The Django Web Application Framework 2
 
DIWE - Coding HTML for Basic Web Designing
DIWE - Coding HTML for Basic Web DesigningDIWE - Coding HTML for Basic Web Designing
DIWE - Coding HTML for Basic Web Designing
 
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
 
Introduccion a HTML5
Introduccion a HTML5Introduccion a HTML5
Introduccion a HTML5
 
html5
html5html5
html5
 
Web Development Course - HTML5 & CSS3 by RSOLUTIONS
Web Development Course - HTML5 & CSS3 by RSOLUTIONSWeb Development Course - HTML5 & CSS3 by RSOLUTIONS
Web Development Course - HTML5 & CSS3 by RSOLUTIONS
 
HTML - hypertext markup language
HTML - hypertext markup languageHTML - hypertext markup language
HTML - hypertext markup language
 
HTML CSS and Web Development
HTML CSS and Web DevelopmentHTML CSS and Web Development
HTML CSS and Web Development
 
MVC & SQL_In_1_Hour
MVC & SQL_In_1_HourMVC & SQL_In_1_Hour
MVC & SQL_In_1_Hour
 
Introduction of Html/css/js
Introduction of Html/css/jsIntroduction of Html/css/js
Introduction of Html/css/js
 
A quick guide to Css and java script
A quick guide to Css and  java scriptA quick guide to Css and  java script
A quick guide to Css and java script
 
HTML5 Refresher
HTML5 RefresherHTML5 Refresher
HTML5 Refresher
 
C# Advanced L09-HTML5+ASP
C# Advanced L09-HTML5+ASPC# Advanced L09-HTML5+ASP
C# Advanced L09-HTML5+ASP
 
Html5 css3
Html5 css3Html5 css3
Html5 css3
 
Html5 ppt
Html5 pptHtml5 ppt
Html5 ppt
 
Html5, a gentle introduction
Html5, a gentle introduction Html5, a gentle introduction
Html5, a gentle introduction
 
Web development basics (Part-1)
Web development basics (Part-1)Web development basics (Part-1)
Web development basics (Part-1)
 

More from Ed Charbeneau

Writing JavaScript for C# Blazor.pptx
Writing JavaScript for C# Blazor.pptxWriting JavaScript for C# Blazor.pptx
Writing JavaScript for C# Blazor.pptxEd Charbeneau
 
Blazor Stability Testing Tools for Bullet Proof Applications
Blazor Stability Testing Tools for Bullet Proof ApplicationsBlazor Stability Testing Tools for Bullet Proof Applications
Blazor Stability Testing Tools for Bullet Proof ApplicationsEd Charbeneau
 
Secrets of a Blazor Component Artisan (v2)
Secrets of a Blazor Component Artisan (v2)Secrets of a Blazor Component Artisan (v2)
Secrets of a Blazor Component Artisan (v2)Ed Charbeneau
 
Modernizing Web Apps with .NET 6.pptx
Modernizing Web Apps with .NET 6.pptxModernizing Web Apps with .NET 6.pptx
Modernizing Web Apps with .NET 6.pptxEd Charbeneau
 
Modernizing Web Apps with .NET 6.pptx
Modernizing Web Apps with .NET 6.pptxModernizing Web Apps with .NET 6.pptx
Modernizing Web Apps with .NET 6.pptxEd Charbeneau
 
Secrets of a Blazor Component Artisan
Secrets of a Blazor Component ArtisanSecrets of a Blazor Component Artisan
Secrets of a Blazor Component ArtisanEd Charbeneau
 
Writing java script for Csharp's Blazor
Writing java script for Csharp's BlazorWriting java script for Csharp's Blazor
Writing java script for Csharp's BlazorEd Charbeneau
 
Giving Clarity to LINQ Queries by Extending Expressions R2
Giving Clarity to LINQ Queries by Extending Expressions R2Giving Clarity to LINQ Queries by Extending Expressions R2
Giving Clarity to LINQ Queries by Extending Expressions R2Ed Charbeneau
 
The future of .NET lightning talk
The future of .NET lightning talkThe future of .NET lightning talk
The future of .NET lightning talkEd Charbeneau
 
Into the next dimension
Into the next dimensionInto the next dimension
Into the next dimensionEd Charbeneau
 
Giving Clarity to LINQ Queries by Extending Expressions
Giving Clarity to LINQ Queries by Extending ExpressionsGiving Clarity to LINQ Queries by Extending Expressions
Giving Clarity to LINQ Queries by Extending ExpressionsEd Charbeneau
 
What is new in Q2 2015
What is new in Q2 2015What is new in Q2 2015
What is new in Q2 2015Ed Charbeneau
 
TelerikNEXT What's new in UI for ASP.NET AJAX
TelerikNEXT What's new in UI for ASP.NET AJAXTelerikNEXT What's new in UI for ASP.NET AJAX
TelerikNEXT What's new in UI for ASP.NET AJAXEd Charbeneau
 
Journey to JavaScript (from C#)
Journey to JavaScript (from C#)Journey to JavaScript (from C#)
Journey to JavaScript (from C#)Ed Charbeneau
 
Don't be a stereotype: Rapid Prototype
Don't be a stereotype: Rapid PrototypeDon't be a stereotype: Rapid Prototype
Don't be a stereotype: Rapid PrototypeEd Charbeneau
 
A crash course in responsive design
A crash course in responsive designA crash course in responsive design
A crash course in responsive designEd Charbeneau
 

More from Ed Charbeneau (17)

Writing JavaScript for C# Blazor.pptx
Writing JavaScript for C# Blazor.pptxWriting JavaScript for C# Blazor.pptx
Writing JavaScript for C# Blazor.pptx
 
Blazor Stability Testing Tools for Bullet Proof Applications
Blazor Stability Testing Tools for Bullet Proof ApplicationsBlazor Stability Testing Tools for Bullet Proof Applications
Blazor Stability Testing Tools for Bullet Proof Applications
 
Secrets of a Blazor Component Artisan (v2)
Secrets of a Blazor Component Artisan (v2)Secrets of a Blazor Component Artisan (v2)
Secrets of a Blazor Component Artisan (v2)
 
Modernizing Web Apps with .NET 6.pptx
Modernizing Web Apps with .NET 6.pptxModernizing Web Apps with .NET 6.pptx
Modernizing Web Apps with .NET 6.pptx
 
Modernizing Web Apps with .NET 6.pptx
Modernizing Web Apps with .NET 6.pptxModernizing Web Apps with .NET 6.pptx
Modernizing Web Apps with .NET 6.pptx
 
Secrets of a Blazor Component Artisan
Secrets of a Blazor Component ArtisanSecrets of a Blazor Component Artisan
Secrets of a Blazor Component Artisan
 
Writing java script for Csharp's Blazor
Writing java script for Csharp's BlazorWriting java script for Csharp's Blazor
Writing java script for Csharp's Blazor
 
Giving Clarity to LINQ Queries by Extending Expressions R2
Giving Clarity to LINQ Queries by Extending Expressions R2Giving Clarity to LINQ Queries by Extending Expressions R2
Giving Clarity to LINQ Queries by Extending Expressions R2
 
The future of .NET lightning talk
The future of .NET lightning talkThe future of .NET lightning talk
The future of .NET lightning talk
 
Into the next dimension
Into the next dimensionInto the next dimension
Into the next dimension
 
Giving Clarity to LINQ Queries by Extending Expressions
Giving Clarity to LINQ Queries by Extending ExpressionsGiving Clarity to LINQ Queries by Extending Expressions
Giving Clarity to LINQ Queries by Extending Expressions
 
What is new in Q2 2015
What is new in Q2 2015What is new in Q2 2015
What is new in Q2 2015
 
TelerikNEXT What's new in UI for ASP.NET AJAX
TelerikNEXT What's new in UI for ASP.NET AJAXTelerikNEXT What's new in UI for ASP.NET AJAX
TelerikNEXT What's new in UI for ASP.NET AJAX
 
Journey to JavaScript (from C#)
Journey to JavaScript (from C#)Journey to JavaScript (from C#)
Journey to JavaScript (from C#)
 
Refactoring css
Refactoring cssRefactoring css
Refactoring css
 
Don't be a stereotype: Rapid Prototype
Don't be a stereotype: Rapid PrototypeDon't be a stereotype: Rapid Prototype
Don't be a stereotype: Rapid Prototype
 
A crash course in responsive design
A crash course in responsive designA crash course in responsive design
A crash course in responsive design
 

Recently uploaded

5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
cybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningcybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningVitsRangannavar
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number SystemsJheuzeDellosa
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...aditisharan08
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - InfographicHr365.us smith
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyFrank van der Linden
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 

Recently uploaded (20)

5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
cybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningcybersecurity notes for mca students for learning
cybersecurity notes for mca students for learning
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number Systems
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - Infographic
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The Ugly
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 

Razor into the Razor'verse

  • 1.
  • 2.
  • 4.
  • 5.
  • 6. • Razor (syntax) • Razor Views • Html Helpers • Razor Pages • Tag Helpers • View Components • Blazor • Razor Components Razor-verse Terminology or technology? ?? ?? ?? ?? ?? ??
  • 7. ASP.NET Razor The Razor syntax is a template markup syntax, based on the C# programming language
  • 8. ASP.NET Razor • Introduced July 2010 by Scott Guthrie • Shipped January 2011 with Visual Studio 2010 • Improve the template experience
  • 9. <ul> <% foreach (p in people) { %> <li><% p.Name %></li> <% } %> </ul> WebForms Why Razor? <ul> @foreach (p in people) { <li>@p.Name</li> } </ul> Razor
  • 10. <ul> <li *ngFor="let p of person"> {{c.name}} </li> </ul> Angular Compare <ul> @foreach (p in people) { <li>@p.Name</li> } </ul> Razor
  • 11. @{ var greeting = "Hello"; } <p>@greeting</p> @{ greeting = "Howdy"; } <p>@greeting</p> IN Razor Syntax: Code Blocks <p>Hello</p> <p>Howdy</p> Out: HTML
  • 12. <span>@( 5 + 10 + 20 )</span> IN Razor Syntax: Complex Expression <span>35</span> Out: HTML
  • 13. @if (value % 2 == 0) { <p>The value was even.</p> } else if (value >= 1337) { <p>The value is large.</p> } else { <p>The value is odd and small.</p> } cshtml Razor Syntax: @if
  • 14. Razor Syntax: Control structures Keyword Try catch While For Foreach If Do while Ternary (?: operator)
  • 15. Razor Syntax: Directives @using adds C# using directive to view @inherits view class @inject inject service @functions add C# code block to a view
  • 16. Razor Complexities Rendering • Generating C# code from the template • Compiling the C# code into an assembly • Loading the assembly into memory • Executing your compiled template
  • 17. // Not real code var engine = new Razor(); var result = engine.RenderTemplate(path); Fail Razor For Templates?
  • 18. Razor Complexities Tightly Coupled to ASP.NET • IView • HtmlEncoder • TextWriter • HttpContext
  • 19. 1 var engine = new RazorLightEngineBuilder() 2 .UseMemoryCachingProvider() 3 .Build(); 4 5 string template = "Hello, @Model.Name. Welcome to RazorLight repository"; 6 ViewModel model = new ViewModel() { Name = "John Doe" }; 7 8 string result = await engine.CompileRenderAsync(“uid", template, model); RazorLight Razor For Templates?
  • 20. • Razor (syntax) • Razor Views • Html Helpers • Razor Pages • Tag Helpers • View Components • Blazor • Razor Components Razor-verse Terminology or technology? ?? ?? ?? ?? ?? ??
  • 21. Razor views (cshtml) • Streamlined for code-focused templating • Returned from a controller Action as a ViewResult • Content is made of – HTML – HTML Helpers *typical – Tag Helpers *new – Razor Components *bleeding edge
  • 22. <ul> <% foreach (p in people) { %> <li><% p.Name %></li> <% } %> </ul> WebForms ASP.NET MVC View engines <ul> @foreach (p in people) { <li>@p.Name</li> } </ul> Razor
  • 23. Razor Syntax: Directives @model model type for view @section enable views to render content to parts of page @addTagHelper adds a Tag Helper to scope (.NET Core)
  • 24.
  • 25. • Razor (syntax) • Razor Views • Html Helpers • Razor Pages • Tag Helpers • View Components • Blazor • Razor Components Razor-verse Terminology or technology? ?? ?? ?? ?? ?? ??
  • 26. HTML Helpers • Invoked as methods within HTML in Razor views • Incapsulates a block of HTML and Razor Code • Produces an HTML string
  • 28. @Html.ActionLink("Create New", "Create") In HTML Helper Usage <a href="/Student/Create">Create New</a> Out
  • 29. Creating HTML Helpers • Extends IHtmlHelper as an extension method • Returns IHtmlContent
  • 30. Func<IHtmlHelper, IHtmlContent> (extension) IHtmlContent Func(this IHtmlHelper htmlHelper) Signature Custom HTML Helper public static IHtmlContent BeerCity(this IHtmlHelper htmlHelper) => new HtmlString("<img src=/img/fulllogo.png />"); Example
  • 31.
  • 32. • Razor (syntax) • Razor Views • Html Helpers • Razor Pages • Tag Helpers • View Components • Blazor • Razor Components Razor-verse Terminology or technology? ?? ?? ?? ?? ?? ??
  • 33. Razor Pages • Introduced in ASP.NET Core • Page-focused approach incorporates its own Controller/Action/Routing • Can integrate with MVC • Content is made of: – HTML – Tag Helpers *typical – HTML Helpers *compatible – Razor Components *bleeding edge
  • 34. MVC vs. Razor Pages
  • 35. @page @model IndexModel <h2>Separate page model</h2> <p> @Model.Message </p> Signature Custom HTML Helper public class IndexModel : PageModel { public string Message { get; private set; } = "PageModel in C#"; public void OnGet() { Message += $"Server time is { DateTime.Now }"; } } Example
  • 36.
  • 37. • Razor (syntax) • Razor Views • Html Helpers • Razor Pages • Tag Helpers • View Components • Blazor • Razor Components Razor-verse Terminology or technology? ?? ?? ?? ?? ?? ??
  • 38. Tag Helpers • Async server-side processing via HTML elements • Use HTML’like Tags and Attributes • Eliminate context switching between HTML and C# • Designed for Unit Testing
  • 39. @Html.Label(“Name”, “First Name:”, new { @class = “caption” }) Signature HTML Helpers vs. Tag Helpers <label asp-for=“Name” class=“caption”>First Name:</label> Example
  • 40. @(Html.Kendo().Grid<Customer>().Name("grid") .Columns(columns => { columns.Bound(c => c.ContactName); columns.Bound(c => c.ContactTitle); columns.Bound(c => c.CompanyName); columns.Bound(c => c.Country); }) HTML Helpers vs. Tag Helpers <kendo-grid name="grid" height="550"> <columns> <column field="ContactName" title="Contact Name" /> <column field="ContactTitle" title="Contact Title" /> <column field="CompanyName" title="Company Name" /> <column field="Country" title="Country“ /> </columns> </kendo-grid>
  • 41. Tag Helper Directives @addTagHelper Component, NameSpace Adds a Tag Helper to scope @addTagHelper *, Kendo.Mvc Ex: 3rd party Tag Helpers @removeTagHelper Component, Namespace Removes a Tag Helper from scope @tagHelperPrefix th: Prefixes Tag Helpers ex: <th:myWidget>
  • 42. Built-in ASP.NET Core Tag Helpers • Anchor • Cache • Distributed Cache • Environment • Form • Form Action • Image • Input • Label • Partial • Select • Textarea • Validation Message • Validation Summary
  • 43. Tag Helpers: Example <kendo-datepicker name="startDate" start="CalendarView.Year" depth="CalendarView.Year" format="MMMM yyyy" value='DateTime.Parse("May 2019")' />
  • 44.
  • 45. • Razor (syntax) • Razor Views • Html Helpers • Razor Pages • Tag Helpers • View Components • Blazor • Razor Components Razor-verse Terminology or technology? ?? ?? ?? ?? ?? ??
  • 46. View Components • Renders a chunk rather than a whole response • Similarities with controller and view • Can have parameters and business logic • Is typically invoked from a layout page • Deprecated by Razor Components??
  • 47. List Items From Database <vc:priority-list max-priority="2" is-done="false"> </vc:priority-list>
  • 48. • Razor (syntax) • Razor Views • Html Helpers • Razor Pages • Tag Helpers • View Components • Blazor • Razor Components Razor-verse Terminology or technology? ?? ?? ?? ?? ?? ??
  • 49. Razor Component (Blazor Framework) • Razor Syntax • Component Architecture vs. HTML generator • Creates a RenderTree (DOM Abstraction) • Similar to JSX for React • Uses .razor file extension • .razor files are used for code generation of .NET classes – These classes implement a RenderTree
  • 50.
  • 51. Browser JavaScript (.js) Parser Compiler JIT Interpreter Native Web APIs (DOM, file storage, etc) HTML (.html) Inline JS JavaScriptRuntime AST Byte code WebAssembly (.wasm) Compiler
  • 52. PUBLISHING COMPONENT MODEL FORMS & VALIDATION DEPENDENCY INJECTION AUTO REBUILDUNIT TESTING JAVASCRIPT INTEROP SERVER-SIDE RENDERING DEBUGGING INTELLISENSE & TOOLING LAYOUTS ASSEMBLY TRIMMING COMPONENT PACKAGES ROUTING Blazor
  • 53. • What it is • Client Side C# • Web Standard Technologies • Mono Runtime for WebAssembly • .NET Standard • What it’s NOT • A Plugin • ASP.NET WebForms • Silverlight • Trans-piled JavaScript
  • 54. Browser Parser Compiler JIT Interpreter Native Web APIs (DOM, file storage, etc) JavaScriptRuntime AST Byte code blazor.js mono.wasm Bootstrapping HTML mono.js netstandard.dll app.dll Interop layer Blazor Components (.razor)
  • 55.
  • 57.
  • 58. • demos.telerik.com/blazor • Blazor.net • EdCharbeneau.com • BlazorPro.com Resources

Editor's Notes

  1. Ok, let’s do this
  2. My name is ed charbeneau
  3. I’m a developer advocate for Progress We make UI components for everything
  4. The default Razor language is HTML. Rendering HTML from Razor markup is no different than rendering HTML from an HTML file. HTML markup in .cshtml Razor files is rendered by the server unchanged. Razor supports C# and uses the @ symbol to transition from HTML to C#. Razor evaluates C# expressions and renders them in the HTML output. When an @ symbol is followed by a Razor reserved keyword, it transitions into Razor-specific markup. Otherwise, it transitions into plain C#. Razor code blocks start with @ and are enclosed by {}. Unlike expressions, C# code inside code blocks isn't rendered. Code blocks and expressions in a view share the same scope and are defined in order.
  5. https://daveaglick.com/posts/the-bleeding-edge-of-razor
  6. https://daveaglick.com/posts/the-bleeding-edge-of-razor
  7. Another example from Telerik UI for ASP.NET Core. This is the Tag Helper for the Date Picker. The Tag Helper is using attribute values that are strong-typed.
  8. Build rich, interactive client UI without writing JavaScript Create reusable UI components with C# and Razor Integrates with your existing ASP.NET Core applications Blazor apps are based on components. A component in Blazor is an element of UI, such as a page, dialog, or data entry form. Components handle user events and define flexible UI rendering logic. Components can be nested and reused. Components are .NET classes built into .NET assemblies that can be shared and distributed as NuGet packages. The component class is usually written in the form of a Razor markup page with a .razor file extension. Components in Blazor are sometimes referred to as Razor components. Razor is a syntax for combining HTML markup with C# code designed for developer productivity. Razor allows you to switch between HTML markup and C# in the same file with IntelliSense support. Razor Pages and MVC also use Razor. Unlike Razor Pages and MVC, which are built around a request/response model, components are used specifically for client-side UI logic and composition.
  9. Opens a gateway to the language multiverse
  10. Finally let’s talk Blazor A different approach Blazor is a fully featured single page application framework by Microsoft It has a huge ecosystem of .NET packages on NuGet because it’s compatible with .NET standard Even Telerik has a UI components
  11. Mono Runtime for web assembly
  12. .NET Core 3 will ship in September .NET Core 3.1 will have long-term support .NET 5 release in November 2020 Major releases every year, long-term support for even-numbered releases Predictable schedule, minor releases if needed
  13. https://en.wikipedia.org/wiki/WebAssembly