20
Robert Haken MVP Development | MCT [email protected] | @RobertHaken ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents

ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents · ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents. DEMO ochutnávka TagHelpers, ViewComponents Index.cshtml - img, cache,

  • Upload
    others

  • View
    31

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents · ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents. DEMO ochutnávka TagHelpers, ViewComponents Index.cshtml - img, cache,

Robert HakenMVP Development | MCT

[email protected] | @RobertHaken

ASP.NET Core 1.0 (MVC6)

TagHelpers & ViewComponents

Page 2: ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents · ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents. DEMO ochutnávka TagHelpers, ViewComponents Index.cshtml - img, cache,

DEMOochutnávka TagHelpers, ViewComponentsIndex.cshtml - img, cache, @Component

Page 3: ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents · ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents. DEMO ochutnávka TagHelpers, ViewComponents Index.cshtml - img, cache,

Použití TagHelpers

Vestavěné TagHelpers

Tvorba vlastních TagHelpers

ViewComponents

Agenda

Page 4: ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents · ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents. DEMO ochutnávka TagHelpers, ViewComponents Index.cshtml - img, cache,

@HtmlHelpers on steroids

HTML-friendly syntaxe

dobrá podpora IntelliSense

TagHelpers

Page 5: ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents · ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents. DEMO ochutnávka TagHelpers, ViewComponents Index.cshtml - img, cache,

DEMOTagHelpers jako nástupce HtmlHelpers

Page 6: ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents · ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents. DEMO ochutnávka TagHelpers, ViewComponents Index.cshtml - img, cache,

<form asp-action="" asp-controller="" asp-route...

asp-antiforgery="true">...</form>

<input asp-for="<model expr>" asp-format="<format string>"/>

<select asp-for="CountryCode" asp-items="ViewBag.Countries">

<textarea asp-for="<model exp>">

<label asp-for="<model expression>"/>

<span asp-validation-for="Email"></span>

<div asp-validation-summary="ValidationSummary.All"></div>

TagHelpers - formulářové

Page 7: ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents · ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents. DEMO ochutnávka TagHelpers, ViewComponents Index.cshtml - img, cache,

<a asp-controller="ApplicationUser"

asp-action="Display"

asp-route-id="@ViewBag.UserId" />

<a asp-route="Login" />

<a asp-route="NamedRoute"

asp-protocol="https"

asp-host="anotherdomain.org" asp-fragment="hash-part">

<img asp-append-version="true"/>

TagHelpers „rozšiřující“

Page 8: ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents · ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents. DEMO ochutnávka TagHelpers, ViewComponents Index.cshtml - img, cache,

<link rel="stylesheet"

asp-append-version="true"

asp-href-include="~/lib/**/*.css"

asp-href-exclude="~/lib/debug/**/*.css"/>

<script asp-append-version="true"

asp-src-include="~/lib/**/*.js"

asp-src-exclude="~/lib/debug/**/*.js">

</script>

<link> + <script>

Page 9: ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents · ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents. DEMO ochutnávka TagHelpers, ViewComponents Index.cshtml - img, cache,

<link rel="stylesheet"

href="//ajax.aspnetcdn.com/..../bootstrap.min.css"

asp-fallback-href="~/lib/bootstrap/css/bootstrap.min.css"

asp-fallback-test-class="hidden"

asp-fallback-test-property="visibility"

asp-fallback-test-value="hidden" />

<script src="//ajax.aspnetcdn.com/.../bootstrap.min.js"

asp-fallback-src="~/lib/bootstrap/js/bootstrap.min.js"

asp-fallback-test="window.jQuery">

</script>

<link/script> fallback

Page 10: ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents · ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents. DEMO ochutnávka TagHelpers, ViewComponents Index.cshtml - img, cache,

<cache priority="CacheItemPriority.Low"

expires-[after|on|sliding]=""

vary-by-[cookie|header|query|route|user]="">

cached content

</cache>

<environment names="Development,Staging,Production">

conditional content

</environment>

TagHelpers „virtuální“

Page 11: ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents · ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents. DEMO ochutnávka TagHelpers, ViewComponents Index.cshtml - img, cache,

TagHelpers AuthoringDEMOVisibleTagHelper

Page 12: ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents · ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents. DEMO ochutnávka TagHelpers, ViewComponents Index.cshtml - img, cache,

nová třída– implementuje ITagHelper interface

– nebo dědí z TagHelper třídy - přidává jen non-async Process()

kdekoliv– typicky ve složce TagHelpers

oživení– @addTagHelper "Name, AssemblyName"

TagHelper

Page 13: ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents · ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents. DEMO ochutnávka TagHelpers, ViewComponents Index.cshtml - img, cache,

TagHelpers AuthoringDEMOTagHelpers walkthrough

Page 14: ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents · ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents. DEMO ochutnávka TagHelpers, ViewComponents Index.cshtml - img, cache,

Views/_ViewImports.cshtml

@addTagHelper "Name, AssemblyName"

@addTagHelper "Nam*, AssemblyName"

@addTagHelper "*, AssemblyName"

@removeTagHelper "Name, AssemblyName"

@tagHelperPrefix="th:"

<!span ...>exclusion from TagHelpers</!span>

Zákoutí TagHelperů

Page 15: ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents · ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents. DEMO ochutnávka TagHelpers, ViewComponents Index.cshtml - img, cache,

ViewComponentsDEMOLastVisitsViewComponent

Page 16: ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents · ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents. DEMO ochutnávka TagHelpers, ViewComponents Index.cshtml - img, cache,

partial-view on steroids

analogie Controller + View

separation of concerns, testability

podporuje asynchronní režim

podporuje Dependency Injection

nahrazuje zrušené child-Actions - @Html.Action()

ViewComponent

Page 17: ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents · ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents. DEMO ochutnávka TagHelpers, ViewComponents Index.cshtml - img, cache,

třída (public, non-abstract, non-generic)– XyViewComponent suffix

– nebo [ViewComponent] atribut

– nebo dědí z ViewComponent třídy

„interface“– IViewComponentResult Invoke(...)

– Task<IViewComponentResult> InvokeAsync(...)

Views– Views/Shared/Components/{ComponentName}/Default.cshtml

– Views/{ControllerName}/Components/{ComponentName}/...

Convention-based Resolution

Page 18: ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents · ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents. DEMO ochutnávka TagHelpers, ViewComponents Index.cshtml - img, cache,

<div class="col-md-4">

@Component.Invoke("ComponentName", ...)

</div>

<div class="col-md-4">

@await Component.InvokeAsync("ComponentName", ...)

</div>

Použití ViewComponent

Page 19: ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents · ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents. DEMO ochutnávka TagHelpers, ViewComponents Index.cshtml - img, cache,

DEMOViewComponentsauthoring (LastRegisteredUser)

/ UsersCount/ LastVisitsViewComponent mods

Page 20: ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents · ASP.NET Core 1.0 (MVC6) TagHelpers & ViewComponents. DEMO ochutnávka TagHelpers, ViewComponents Index.cshtml - img, cache,

www.showit.sk

www.gopas.sk