Overview of ASP.NET Tag Helpers in Web Applications

 
ASP.NET Web
applications – ICD0015
 
TalTech IT College, Andres Käver, 2018-2019, Spring semester
Web: http://enos.Itcollege.ee/~akaver/ASP.NETCore
Skype: akaver   Email: 
akaver@itcollege.ee
 
1
 
Views 
 Tag Helpers
 
Tag Helpers enable server-side code to participate in creating and
rendering HTML elements in Razor files.
There are many built-in Tag Helpers for common tasks - such as
creating forms, links, loading assets and more - and even more
available in public GitHub repositories and as NuGet packages.
Tag Helpers are authored in C#, and they target HTML elements
based on element name, attribute name, or parent tag.
Tag helpers do not replace Html helpers 
 there is not a Tag helper
for every Html helper
 
2
 
Views 
 Tag Helpers - <form>
 
Asp-action
Asp-all-route-data
Asp-antiforgery
Asp-area
Asp-controller
Asp-fragment
Asp-route
Asp-route-<parameter name>
 
3
 
<
form
 
asp-controller
="Account"
 
asp-action
="Login"
 
asp-route-returnurl
="
@ViewData[
"ReturnUrl"
]
"
 
method
="post"
 
class
="form-horizontal">
<form method="post" class="form-horizontal"
action="/Account/Login">
 
Views 
 Tag Helpers - <form>
 
Asp-controller=“<Controller Name>”
Asp-action=“<Action Name>”
Forms target is constructed out of controller and action tag helpers
Asp-route=“<Route Name from routing table>”
Forms target is constructed using routing table
Asp-route-<parameter name>
Parameter name is added to forms target (as query string)
Asp-antiforgery=“true/false”
Generate anti-forgery token as hidden value to form. Usually
controlled by [ValidateAntiForgeryToken] attribute in Controller
 
4
<input 
name
="
__RequestVerificationToken
" 
type
="
hidden
" 
value
="
CfDJ8O3e77kPeG5Fju-
exRwNp8_5FUhPiQ-vxSyhpobWy0ORwL1QWwrZfyGSKxe-hClHCByTfSImSXgBIJ-
cxSgHrvQsOLluGSIwgAFHclMpAIWaBBB8csOoiW0gS1o_bp_sQlhxrypM37B47MU8I_cfN1A
" />
 
Views 
 Tag Helpers - <form>
 
Asp-all-route-data
Give a dictionary for all route/target parameters
Asp-area
Use area in route/target (usually not needed to specify explicitly)
Asp-fragment
add #<value> to route/target
 
5
 
Views 
 Tag Helpers - <div>
 
Asp-validation-summary 
 display validation summary in this div
ValidationSummary.
All 
 property and model
ModelOnly 
 only model
None - none
 
6
 
Views 
 Tag Helpers - <input>
 
Asp-action, Asp-all-route-data, Asp-area, Asp-controller, Asp-fragment,
Asp-route
Asp-for=“<ModelExpression>”
Generates id and name attributes 
 used later in model binding
Sets the type attribute 
 based on model type and data annotations
Sets up client side validation
asp-for=“property1” becomes in generated code m=>m.property1
Asp-format=“<format>”
use to format value
<input asp-for="SomeNumber" asp-format="{0:N4}"/>
Input tag helper does not handle collections and templates 
 use
Html.XxxxxFor
 
7
 
Views 
 Tag Helpers - <input>
 
Input type is set based on .NET type
 
8
 
Views 
 Tag Helpers - <input>
 
Or use data annotations
 
9
 
Views 
 Tag Helpers - <span>
 
Asp-validation-for
Display validation error (if there is one for this model property) in this
span
 
10
<
span
 
asp-validation-for
="
LastName
"
 
class
="text-danger"></
span
>
 
Views 
 Tag Helpers - <label>
 
Asp-for
Generate label for this model property
 
11
<
label
 
asp-for
="
LastName
"
 
class
="col-md-2 control-label"></
label
>
<label class="col-md-2 control-label" for="FirstName">FirstName</label>
 
Views 
 Tag Helpers - <textarea>
 
Asp-for
Generate textarea input for this model property.
Id, name, validation
 
12
 
Views 
 Tag Helpers - <select>,
option group <optgroup>
 
Asp-for
specifies the model property
Asp-items
sepcifies option elements (List<SelectListItem>)
 
 
You can generate option list from enums
 
13
<select 
asp-for
=
"Country"
 
asp-items
=
"Model.Countries"
></select>
<select 
asp-for
=
"EnumCountry"
            
asp-items
=
"Html.GetEnumSelectList<CountryEnum>()"
>
 
Views 
 Tag Helpers - <select>,
option group <optgroup>
 
The HTML <optgroup> element is
generated when the view model
contains one or more
SelectListGroup objects.
 
14
public
 
CountryViewModelGroup
()
    {
        
var
 NorthAmericaGroup =
   
new
 SelectListGroup { Name = 
”NA"
 };
        
var
 EuropeGroup =
   
new
 SelectListGroup { Name = 
”EU"
 };
 
        Countries = 
new
 List<SelectListItem>
{
            
new
 SelectListItem
{
                Value 
=
 
"MEX"
,
                Text 
=
 
"Mexico"
,
                Group = NorthAmericaGroup
            },
   
new
 SelectListItem
{
                Value 
=
 
"FR"
,
                Text 
=
 
"France"
,
                Group = EuropeGroup
            },
 
Views 
 Tag Helpers - <select>
multi-select
 
The Select Tag Helper will automatically generate the multiple =
"multiple" attribute if the property specified in the asp-for attribute is
an IEnumerable
 
15
public
 
class
 
CountryViewModelIEnumerable
    {
        
public
 IEnumerable<
string
> CountryCodes { 
get
; 
set
; }
 
        
public
 List<SelectListItem> Countries { 
get
; } = 
new
 List<SelectListItem>
        {
            
new
 SelectListItem { Value = 
"MX"
, Text = 
"Mexico"
 },
            
new
 SelectListItem { Value = 
"CA"
, Text = 
"Canada"
 },
 
Views 
 Tag Helpers - Collections
 
 
16
public
 
class
 
ToDoItem
{
    
public
 
string
 Name { 
get
; 
set
; }
    
public
 
bool
 IsDone { 
get
; 
set
; }
}
@model List
<ToDoItem>
@for (int i 
=
 0; i 
< 
Model.Count
; 
i
++)
        {
           <
tr
>
   
 
<
td
>
         
  
<label 
asp-for
=
"@Model[i].Name"
></label>
   
<
/td
>
     
  
<
td
>
         
  
<
input 
asp-for
=
"@Model[i].IsDone"
 />
     
  
<
/td
>
  
  
<
/tr
>
        }
 
Views 
 Tag Helpers - <a>
 
Asp-action, Asp-all-route-data, Asp-area, Asp-controller, Asp-fragment
Asp-route, Asp-route-<parameter name>
Asp-host
Specify host to use in generated link (default is relative to current host)
Asp-protocol
Specify protocol to use (default is current protocol)
 
17
 
Views 
 Tag Helpers - <img>
 
Asp-append-version=“<true/false>”
Enable cache busting. Generates file version hash and appends it
to source.
 
18
 
Views 
 Tag Helpers - <script>
 
Asp-append-version
Asp-fallback-src
Asp-fallback-src-exclude
Asp-fallback-src-include
Asp-fallback-test
Asp-src-exclude
Asp-src-include
 
 
19
 
<
script
 
src
="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.2.0.min.js"
                
asp-fallback-src
="~/lib/jquery/dist/jquery.min.js"
                
asp-fallback-test
="window.jQuery"
                
 
crossorigin
="anonymous"
                
integrity
="sha384-
K+ctZQ+LL8q6tP7I94W+qzQsfRV2a+AfHIi9k8z8l9ggpc8X+Ytst4yBo/hH+8Fk">
        
</
script
>
 
Views 
 Tag Helpers - <script>
 
Asp-append-version
Asp-fallback-src
If asp-fallback-test is negative (no network) then fall back to this location
Asp-fallback-test
Javascript functionality to test
Asp-fallback-src-exclude, Asp-fallback-src-include, Asp-src-exclude, Asp-src-include
Comma separated list of sources to include or exclude
 
 
 
20
 
Views 
 Tag Helpers - <link>
 
Asp-append-version
Asp-fallback-href
Asp-fallback-href-exclude
Asp-fallback-href-include
Asp-fallback-test-class
Asp-fallback-test-property
Asp-fallback-test-value
Asp-href-exclude
Asp-href-include
 
 
21
<
link
 
rel
="stylesheet"
href
="https://
/3.3.7/css/bootstrap.min.css"
asp-fallback-href
="~/lib/css/bootstrap.min.css"
asp-fallback-test-class
="sr-only”
asp-fallback-test-property
="position"
asp-fallback-test-value
="absolute"/>
<
link
rel
="stylesheet"
href
="~/css/site.min.css"
asp-append-version
="true"/>
 
Views 
 Tag Helpers - <environment>
 
Names=“comma_separated_list”
asp.net core pre-defines following enviroments 
 Development,
Staging, Production. Useful for branching in cshtml files.
 
22
<
environment
 
names
="Development">
        
<
link
 
rel
="stylesheet"
 
href
="~/lib/bootstrap/dist/css/bootstrap.css"
 
/>
        
<
link
 
rel
="stylesheet"
 
href
="~/css/site.css"
 
/>
</
environment
>
<
environment
 
names
="Staging,Production">
 
<
link
 
rel
="stylesheet"
 
href
="https://ajax.aspnetcdn.com/
/css/bootstrap.min.css"
              
asp-fallback-href
="~/lib/bootstrap/dist/css/bootstrap.min.css"
              
asp-fallback-test-class
="sr-only"
 
asp-fallback-test-property
="position"
   
   
asp-fallback-test-value
="absolute"/>
    
<
link
 
rel
="stylesheet"
 
href
="~/css/site.min.css"
 
asp-append-version
="true"/>
</
environment
>
 
Views 
 Html helpers
 
Tag helpers are there in addition to Html helpers.
Some functionality is only possible with Html helpers.
Html helpers generate full html tags 
 harder to read cshtml files,
designers cant modify easily
Four main categories of helpers
Output
Input
Form
Link
 
23
 
Views 
 html helpers
 
Output
 
DisplayFor
DisplayForModel
DisplayNameFor
DisplayNameForModel
DisplayTextFor
LabelFor
LabelForModel
 
24
 
Views 
 html helpers
 
Input helpers
EditorFor
TextAreaFor
TextBoxFor
DropDownFor
EnumDropDownFor
ListBoxFor
RadioButtonFor
HiddenFor
CheckBoxFor
PasswordFor
 
25
 
Views 
 html helpers
 
Form helpers
BeginForm
BeginRouteForm
EndForm
AntiForgeryToken
HiddenFor
 
26
 
Views 
 html helpers
 
Link helpers
ActionLink
RouteLink
 
27
 
Views 
 html helpers, EditorFor
 
EditorFor(expression)
EditorFor(expression, additionalViewData)
EditorFor(expression, templateName)
EditorFor(expression, templateName, additionalViewData)
EditorFor(expression, templateName, htmlFieldName)
EditorFor(expression, templateName, htmlFieldName, additionalViewData)
 
Expression - lambda
 
28
 
Views 
 html helpers
 
 
29
 
 
 
<dt>
            
  
@Html.DisplayNameFor(model => model.FirstName)
        </dt>
        <dd>
            
  
@Html.DisplayFor(model => model.FirstName)
        </dd>
@Html.EditorFor(
 
model => model.Participant.FirstName,
 
new
 { htmlAttributes = 
new
 { @class = 
"form-control"
 } }
)
@Html.ValidationMessageFor(
 
model => model.Participant.FirstName,
 
""
,
 
new
 { @class = 
"text-danger"
 }
)
@Html.ActionLink(
"Show items"
, 
"Show"
, 
new
 { id = 1},
 
htmlAttributes: 
new
 { @class = 
"btn btn-primary"
, role = 
"button"
 })
 
THE END. For now. I’ll be back.
 
It was great! It’s the best. Not a fake news!
 
30
 
Views - TODO
 
HTML helpers
View Components
 
31
Slide Note
Embed
Share

Learn about the usage of Tag Helpers in ASP.NET web applications, how they enable server-side code to create and render HTML elements in Razor files, and the benefits they offer in simplifying common tasks like form creation and asset loading. Explore the construction of forms using Tag Helpers, including handling routing, anti-forgery tokens, and routing parameters effectively.

  • ASP.NET
  • Tag Helpers
  • Web Applications
  • Razor Files
  • Server-Side Code

Uploaded on Sep 23, 2024 | 0 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

E N D

Presentation Transcript


  1. 1 ASP.NET Web applications ICD0015 TalTech IT College, Andres K ver, 2018-2019, Spring semester Web: http://enos.Itcollege.ee/~akaver/ASP.NETCore Skype: akaver Email: akaver@itcollege.ee

  2. Views Tag Helpers 2 Tag Helpers enable server-side code to participate in creating and rendering HTML elements in Razor files. There are many built-in Tag Helpers for common tasks - such as creating forms, links, loading assets and more - and even more available in public GitHub repositories and as NuGet packages. Tag Helpers are authored in C#, and they target HTML elements based on element name, attribute name, or parent tag. Tag helpers do not replace Html helpers there is not a Tag helper for every Html helper

  3. Views Tag Helpers - <form> 3 <form asp-controller="Account" asp-action="Login" asp-route-returnurl="@ViewData["ReturnUrl"]" method="post" class="form-horizontal"> Asp-action Asp-all-route-data Asp-antiforgery Asp-area <form method="post" class="form-horizontal" action="/Account/Login"> Asp-controller Asp-fragment Asp-route Asp-route-<parameter name>

  4. Views Tag Helpers - <form> 4 Asp-controller= <Controller Name> Asp-action= <Action Name> Forms target is constructed out of controller and action tag helpers Asp-route= <Route Name from routing table> Forms target is constructed using routing table Asp-route-<parameter name> Parameter name is added to forms target (as query string) Asp-antiforgery= true/false Generate anti-forgery token as hidden value to form. Usually controlled by [ValidateAntiForgeryToken] attribute in Controller <input name="__RequestVerificationToken" type="hidden" value="CfDJ8O3e77kPeG5Fju- exRwNp8_5FUhPiQ-vxSyhpobWy0ORwL1QWwrZfyGSKxe-hClHCByTfSImSXgBIJ- cxSgHrvQsOLluGSIwgAFHclMpAIWaBBB8csOoiW0gS1o_bp_sQlhxrypM37B47MU8I_cfN1A" />

  5. Views Tag Helpers - <form> 5 Asp-all-route-data Give a dictionary for all route/target parameters Asp-area Use area in route/target (usually not needed to specify explicitly) Asp-fragment add #<value> to route/target

  6. Views Tag Helpers - <div> 6 Asp-validation-summary display validation summary in this div ValidationSummary. All property and model ModelOnly only model None - none

  7. Views Tag Helpers - <input> 7 Asp-action, Asp-all-route-data, Asp-area, Asp-controller, Asp-fragment, Asp-route Asp-for= <ModelExpression> Generates id and name attributes used later in model binding Sets the type attribute based on model type and data annotations Sets up client side validation asp-for= property1 becomes in generated code m=>m.property1 Asp-format= <format> use to format value <input asp-for="SomeNumber" asp-format="{0:N4}"/> Input tag helper does not handle collections and templates use Html.XxxxxFor

  8. Views Tag Helpers - <input> 8 Input type is set based on .NET type .NET type Input Type Bool type= checkbox String type= text DateTime type= datetime Byte type= number Int type= number Single, Double type= number

  9. Views Tag Helpers - <input> 9 Or use data annotations Attribute Input Type [EmailAddress] type= email [Url] type= url [HiddenInput] type= hidden [Phone] type= tel [DataType(DataType.Password)] type= password [DataType(DataType.Date)] type= date [DataType(DataType.Time)] type= time

  10. Views Tag Helpers - <span> 10 Asp-validation-for Display validation error (if there is one for this model property) in this span <spanasp-validation-for="LastName" class="text-danger"></span>

  11. Views Tag Helpers - <label> 11 Asp-for Generate label for this model property <labelasp-for="LastName" class="col-md-2 control-label"></label> <label class="col-md-2 control-label" for="FirstName">FirstName</label>

  12. Views Tag Helpers - <textarea> 12 Asp-for Generate textarea input for this model property. Id, name, validation

  13. Views Tag Helpers - <select>, option group <optgroup> 13 Asp-for specifies the model property Asp-items sepcifies option elements (List<SelectListItem>) <select asp-for="Country" asp-items="Model.Countries"></select> You can generate option list from enums <select asp-for="EnumCountry" asp-items="Html.GetEnumSelectList<CountryEnum>()">

  14. Views Tag Helpers - <select>, option group <optgroup> 14 The HTML <optgroup> element is generated when the view model contains one or more SelectListGroup objects. public CountryViewModelGroup() { var NorthAmericaGroup = new SelectListGroup { Name = NA" }; var EuropeGroup = new SelectListGroup { Name = EU" }; Countries = new List<SelectListItem>{ new SelectListItem{ Value = "MEX", Text = "Mexico", Group = NorthAmericaGroup }, new SelectListItem{ Value = "FR", Text = "France", Group = EuropeGroup },

  15. Views Tag Helpers - <select> multi-select 15 The Select Tag Helper will automatically generate the multiple = "multiple" attribute if the property specified in the asp-for attribute is an IEnumerable public class CountryViewModelIEnumerable { public IEnumerable<string> CountryCodes { get; set; } public List<SelectListItem> Countries { get; } = new List<SelectListItem> { new SelectListItem { Value = "MX", Text = "Mexico" }, new SelectListItem { Value = "CA", Text = "Canada" },

  16. Views Tag Helpers - Collections 16 public class ToDoItem { public string Name { get; set; } public bool IsDone { get; set; } } @model List<ToDoItem> @for (int i = 0; i < Model.Count; i++) { <tr> <td> <label asp-for="@Model[i].Name"></label> </td> <td> <input asp-for="@Model[i].IsDone" /> </td> </tr> }

  17. Views Tag Helpers - <a> 17 Asp-action, Asp-all-route-data, Asp-area, Asp-controller, Asp-fragment Asp-route, Asp-route-<parameter name> Asp-host Specify host to use in generated link (default is relative to current host) Asp-protocol Specify protocol to use (default is current protocol)

  18. Views Tag Helpers - <img> 18 Asp-append-version= <true/false> Enable cache busting. Generates file version hash and appends it to source.

  19. Views Tag Helpers - <script> 19 <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.2.0.min.js" asp-fallback-src="~/lib/jquery/dist/jquery.min.js" asp-fallback-test="window.jQuery" crossorigin="anonymous" integrity="sha384- K+ctZQ+LL8q6tP7I94W+qzQsfRV2a+AfHIi9k8z8l9ggpc8X+Ytst4yBo/hH+8Fk"> </script> Asp-append-version Asp-fallback-src Asp-fallback-src-exclude Asp-fallback-src-include Asp-fallback-test Asp-src-exclude Asp-src-include

  20. Views Tag Helpers - <script> 20 Asp-append-version Asp-fallback-src If asp-fallback-test is negative (no network) then fall back to this location Asp-fallback-test Javascript functionality to test Asp-fallback-src-exclude, Asp-fallback-src-include, Asp-src-exclude, Asp-src-include Comma separated list of sources to include or exclude

  21. Views Tag Helpers - <link> 21 <link rel="stylesheet" href="https:// /3.3.7/css/bootstrap.min.css" asp-fallback-href="~/lib/css/bootstrap.min.css" asp-fallback-test-class="sr-only asp-fallback-test-property="position" asp-fallback-test-value="absolute"/> <link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true"/> Asp-append-version Asp-fallback-href Asp-fallback-href-exclude Asp-fallback-href-include Asp-fallback-test-class Asp-fallback-test-property Asp-fallback-test-value Asp-href-exclude Asp-href-include

  22. Views Tag Helpers - <environment> 22 Names= comma_separated_list asp.net core pre-defines following enviroments Development, Staging, Production. Useful for branching in cshtml files. <environmentnames="Development"> <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" /> <link rel="stylesheet" href="~/css/site.css" /> </environment> <environmentnames="Staging,Production"> <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ /css/bootstrap.min.css" asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css" asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute"/> <link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true"/> </environment>

  23. Views Html helpers 23 Tag helpers are there in addition to Html helpers. Some functionality is only possible with Html helpers. Html helpers generate full html tags harder to read cshtml files, designers cant modify easily Four main categories of helpers Output Input Form Link

  24. Views html helpers 24 Output DisplayFor DisplayForModel DisplayNameFor DisplayNameForModel DisplayTextFor LabelFor LabelForModel

  25. Views html helpers 25 Input helpers EditorFor TextAreaFor TextBoxFor DropDownFor EnumDropDownFor ListBoxFor RadioButtonFor HiddenFor CheckBoxFor PasswordFor

  26. Views html helpers 26 Form helpers BeginForm BeginRouteForm EndForm AntiForgeryToken HiddenFor

  27. Views html helpers 27 Link helpers ActionLink RouteLink

  28. Views html helpers, EditorFor 28 EditorFor(expression) EditorFor(expression, additionalViewData) EditorFor(expression, templateName) EditorFor(expression, templateName, additionalViewData) EditorFor(expression, templateName, htmlFieldName) EditorFor(expression, templateName, htmlFieldName, additionalViewData) Expression - lambda

  29. Views html helpers 29 <dt> @Html.DisplayNameFor(model => model.FirstName) </dt> <dd> @Html.DisplayFor(model => model.FirstName) </dd> @Html.EditorFor( model => model.Participant.FirstName, new { htmlAttributes = new { @class = "form-control" } } ) @Html.ValidationMessageFor( model => model.Participant.FirstName, "", new { @class = "text-danger" } ) @Html.ActionLink("Show items", "Show", new { id = 1}, htmlAttributes: new { @class = "btn btn-primary", role = "button" })

  30. 30 It was great! It s the best. Not a fake news! THE END. For now. I ll be back.

  31. Views - TODO 31 HTML helpers View Components

More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#