Core Razor Pages

ASP.NET Core promote the Razor pages architecture over MVC going forward.

Everything old is new again, code-behind instead of separate views/controllers.

Super clean architecture, with the Page model being basically a view model and controller all in one.

Sweet environment tags

    <environment include="Development">
        <script src="~/lib/blah.js"></script>
    </environment>
    <environment exclude="Development">
        <script src="from CDN or fallback (see below)"></script>
    </environment>

I love the CDN fallback

        <script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"
                asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js"
                asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal"
                crossorigin="anonymous"
                integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd">
        </script>

Nice template literals

var name = "world";
($"Hello, {name}");

Tag helpers are much simpler

<a asp-page="MyRazorPage">Click me</a>

Form data binding

// Code behind
[BindProperty]
public String MyModelProperty { get; set; } = new();
public async Task<IActionResult> OnPost()
{
  if (!ModelState.IsValid) return Page;
  await Repository ... 
  Return RedirectToPage("Index");
}

// Razor template
<div asp-validation-summary="All" class="text-danger"></div>

<label asp-for="MyModelProperty"></label>
<input type="text" asp-for="MyModelProperty" />