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" />