日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET Core中的TagHelper及其用法

發(fā)布時間:2023/12/18 asp.net 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET Core中的TagHelper及其用法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • TagHelper
  • 導入內置的TagHelper
    • 使用TagHelper生成Link鏈接🔗
    • TagHelper中的Link標簽🗒
  • 為什么要使用TagHelper
    • 使用TagHelper的優(yōu)勢
  • Image TagHelper
    • 瀏覽器緩存
    • 禁用瀏覽器緩存
    • HTTP狀態(tài)碼的200與302
    • ASP.NET Core中的Image TagHelper
  • ASP.NET Core中的Environment TagHelper
    • 設置應用程序環(huán)境的名稱
    • 如果CDN“掛了”,怎么辦
  • 使用Bootstrap給項目添加導航菜單
    • 布局頁面_Layout.cshtml的代碼
  • Form TagHelpers 提交學生信息
    • 場景描述
    • Form TagHelper
    • Input TagHelper
    • Label TagHelper
    • Select TagHelper
    • Create.cshtml中基本的HTML代碼
    • Bootstrap優(yōu)化后的Create.cshtml的代碼

TagHelper

標記幫助程序(TagHelper)是ASP.NET Core中的新增功能。

? 首先通過一個例子來理解TagHelper及其用途。

? TagHelper是服務器端組件。它們在服務器上運行,并在Razor文件中創(chuàng)建和渲染HTML元素。如果對以前版本的ASP.NET Core MVC有一定了解,那么讀者可能也知道HTML TagHelper。TagHelper類似于HTML TagHelper,ASP.NET Core有許多內置的TagHelper用于常見任務,比如生成鏈接、創(chuàng)建表單和加載數(shù)據(jù)等。TagHelper的出現(xiàn)可幫助提高生產效率,并生成更穩(wěn)定的 、可靠和可維護的代碼。

導入內置的TagHelper

? 要在整個應用程序中的所有視圖使用內置TagHelper,需要在_ViewImports.cshtml文件導入TagHelper。要導入TagHelper,我們使用@addTagHelper指令。

@addTagHelper *.Microsoft.AspNetCore.Mvc.TagHelpers

? 通配符*表示我們要導入MVC中所有的TagHelper,而Microsoft.AspNetCore.Mvc.TagHelpers則是內置TagHelper的組件位置。

使用TagHelper生成Link鏈接🔗

? 假設要查看指定學生的詳細信息,則要生成以下超鏈接。數(shù)字5是我們要查看其詳細信息的學生的ID。

/home/details/5

? 我們可以通過多種方式在Razor視圖中實現(xiàn)該效果。

  • 手動生成鏈接
  • @foreach (var student in Model) {<a href="/home/details/@student.ID">查看</a> }
  • 使用HTML TagHelper
  • @Html.ActionLink("查看","details",new {ID = student.ID})生成結果Link元素<a href="/home/details/5">查看</a>或者@Url.Action("details","home",new{ID=student.Id})

    ? 生成的結果:/home/details/5。👀

  • 使用TagHelper
  • <a asp-controller="home" asp-action="details" asp-route-id="@student.ID" >查看</a>, 生成結果<a href="/Home/details/5">查看</a>

    TagHelper中的Link標簽🗒

    ? TagHelper中的Link標簽通過添加新屬性來增強標準的HTML標簽,以下TagHelper均可以增強Link標簽的href屬性值。

    asp-controller asp-action asp-route-{value}

    ? 正如名稱所表示的那樣,asp-controller指定控制器名稱,而asp-action指定要包含在生成的href屬性值中的操作方法名稱。asp-route-{value}屬性用于在生成的href中包含路由數(shù)據(jù)屬性值。{value}可以替換為路由參數(shù),比如id。參考以下代碼:

    <a asp-controller="home" asp-action="details" asp-route-id="@student.ID">查看</a>

    ? 生成結果: <a href="/home/details/5">查看</a>

    ? 從下面的代碼中可以看出,手動生成的鏈接比使用HTMLHelper或TagHelper要容易得多。

    <a href="/home/details/@student.ID">查看</a>

    ? 讀者可能產生一個疑問:為什么我們要使用TagHelper或HTML Helper來生成這些鏈接,而不是手動生成?我們將在下文回答這個問題。

    為什么要使用TagHelper

    ? 讓我們通過一個簡單的例子來理解TagHelper的優(yōu)勢。

    ? 假設我們想要查看特定的學生的詳細信息,則需要生成超鏈接,比如學生ID為5的詳細信息。

    /home/details/5

    ? 我們可以通過手動編寫,如下:

    <a href="/home/details/@student.ID">查看</a>

    ? 也可以使用Link鏈接的TagHelper,代碼如下:

    <a asp-controller="home" asp-action="details" asp-route-id="@student.ID">查看</a>

    使用TagHelper的優(yōu)勢

    ? TagHelper是根據(jù)應用程序的路由模板生成的鏈接,這意味著如果我們更改路由模板,則TagHelper生成的鏈接會針對路由模板所做的更改自動修改和適配,讓生成的鏈接正常工作。

    ? 而如果我們手動硬編碼了URL,則當應用程序路由模塊發(fā)生變化時,就必須在很多地方更改代碼,這樣效率并不高。

    ? 可以通過一個例子來理解這一點。

    app.UseEndpoints(endpoints=>{endpoints.MapControllerRoute(name:"default",pattern:"{controller=Home}/{action=Index}/{id?}");});

    ? 以下代碼沒有用TagHelper,而是對URL路徑進行硬編碼。

    <a href="/home/details/@student.ID">查看</a>

    以下代碼是使用<a>元素的TagHelper完成的。

    <a asp-controller="home" asp-action="details" asp-route-id="@student.ID">查看</a>

    ? 請注意,我們沒有針對URL路徑進行硬編碼,只指定控制器和操作方法的名稱,以及路由參數(shù)及其值。在服務器上執(zhí)行TagHelper時,它們會查看路由模板并自動生成正確的URL。

    ? 上述兩種方法都會生成正確的URL路徑(/home/details/5),它適用于當前路由模板({controller=Home}/{action=Index}/{id?})。

    ? 現(xiàn)在讓我們改變路由模板,代碼如下。請注意,在URL中有字符串pragim。

    app.UseEndpoints(endpoints=>{endpoint.MapControllerRoute(name:"deafault",pattern:"pragim/{controller=Home}/{action=Index}/{id?}");});

    ? 請注意,不要忘記刪除HomeController中屬性路由的屬性,否則項目還是會正常進入Home/Index的路徑中。當讀者運行項目發(fā)生404錯誤的時候,記得添加pragim域信息和正確的URL訪問路徑http://localhost:2051/pragim。編譯并運行項目,使用TagHelper生成的代碼是正確的鏈接。

    <a href="/pragim/home/details/1">查看</a>。 //其中未使用TagHelper的代碼則沒有變化,缺少URL路徑“/pragim” <a href="/home/details/1">查看</a>

    ? 我們還有其他TagHelper,它可以生成表單。將此表單發(fā)回服務器時,將自動處理發(fā)布的值并顯示相關的驗證信息。如果沒有這些TagHelper,我們將不得不編寫大量自定義代碼來實現(xiàn)相同的功能。

    ? 如果此時讀者覺得沒有多大意義,請耐下心來。我們會在后面創(chuàng)建學生信息的時候討論表單的TagHelper。

    Image TagHelper

    ? 在開始說Image標記幫助程序的好處之前,我們先驗證一下普通元素的問題。

    ? 準備好兩個圖片文件,一個名為noimage.png,另一個名為noimage1.png,把它們存儲在wwwroot/images文件夾中。現(xiàn)在正常運行項目,如圖所示。

    ? 接下來回到項目中,將noimage.png重命名為noimage2.png。然后將noimage1.png重命名為noimage.png。再次刷新頁面會發(fā)現(xiàn)沒有變化,打開開發(fā)者工具可以發(fā)現(xiàn),返回的HTTP Code:200 OK(from memmory cache)是從緩存中得到的,如圖所示。

    ? 這樣帶來的問題是用戶會認為我們的程序出問題了,那么怎么解決?

    瀏覽器緩存

    ? 當訪問網頁時,大多數(shù)瀏覽器會緩存該網頁的圖片,這樣再次訪問該頁面時,瀏覽器就不用從Web服務器下載相同的圖片,而是從緩存中提取。在大多數(shù)情況下,這不是問題,因為圖片不會經常發(fā)生改變,但是這對開發(fā)人員來說相當不友好。

    禁用瀏覽器緩存

    ? 由于某種原因,如果讀者不希望瀏覽使用器緩存,則可以禁用它。比如,要在Google Chrome中禁用緩存,步驟如下:

    • 按F12,啟動Browser Developer Tools
    • 單擊NetWork選項卡。
    • 選中DIsable cache復選框。如圖所示。

    ? 禁用瀏覽器緩存后,會帶來一個明顯的問題,那就是每次訪問該頁面時都必須從服務器下載圖片,要記得平時關閉禁用緩存。

    ? 現(xiàn)在刷新瀏覽器,新的圖片就會加載出來了。

    HTTP狀態(tài)碼的200與302

    ? HTTP狀態(tài)碼是用于表示網頁服務器HTTP響應狀態(tài)的3位數(shù)字代碼。狀態(tài)碼的第一個數(shù)字代表響應的5中狀態(tài)之一,這里我們只介紹涉及的3xx和2xx系列。

    ? 2xx系列代表請求已成功被服務器接收、理解并接受,這系列中常見的200狀態(tài)碼和201狀態(tài)碼。

    • 200狀態(tài)碼:表示請求已成功,請求所希望的響應頭或數(shù)據(jù)體將隨此響應返回。
    • 201狀態(tài)碼:表示請求成功,服務器創(chuàng)建了新的資源,并且其URI已經隨Location請求頭信息返回。假如需要的資源無法及時建立的話,應當返回202Accepted。

    ? 3xxx系列代表需要客戶端采取進一步的操作才能完成請求,這些狀態(tài)碼用來重定向,后續(xù)的請求地址(重定向目標)在本次響應的Location域中指明。這系列中常見的有301狀態(tài)碼和302狀態(tài)碼。

    • 301狀態(tài)碼:被請求的資源已永久移動到新位置。服務器返回此響應(對GET請求或HEAD請求的響應)時,會自動將請求者轉到新位置。
    • 302狀態(tài)碼:請求的資源臨時從不同URI響應請求,但請求者應繼續(xù)使用原有位置來進行以后的請求。

    簡單來說:3xx系列表示請求的是客戶端,而2xx系列表示請求的是服務器端。

    ASP.NET Core中的Image TagHelper

    ? 從性能角度來看,只有在服務器上更改了圖片才能對其進行下載。如果圖片未更改,請使用瀏覽器中緩存的照片。這意味著我們將擁有兩全其美的優(yōu)勢。

    ? Image TagHelper可以幫助我們實現(xiàn)這一效果。要使用Image TagHelper,請包含asp-append-version屬性并將其設置為true。

    ? 現(xiàn)在我們回到項目中,打開Index.cshtml和Details.cshtml并對它們進行修改,代碼如下。

    <img src="~/images/noimgage.png" asp-append-verison="true"/>

    ? Image TagHelper增強了img標簽屬性,為靜態(tài)圖像文件提供了緩存清楚行為,通過散列計算生成唯一的散列值并將其附加到圖片的URL中。唯一的散列值會提示客戶端(或某些代理)從服務器重新加載圖片,而不是從瀏覽器的緩存中重新加載。以下是生成的代碼。

    ? 只有當每次服務器上的圖片更改時,才會計算并緩存新的散列值。如果圖片未更改,則不會重新計算散列值。使用此散列值,瀏覽器會跟蹤服務器上的圖片內容是否已更改。使用Image TagHelper可以幫助我們解決很多由潛在因素造成的問題。

    ASP.NET Core中的Environment TagHelper

    ? 我們在ASP.NET Core應用程序開發(fā)過程中使用了Bootstrap。為了便于調試,希望在本地開發(fā)計算機(在開發(fā)環(huán)境中)通過應用程序加載沒有壓縮的Bootstrap的CSS文件(bootstrap.css)。而在Staging、Production或除Development環(huán)境以外的任何其他環(huán)境中,希望應用程序能從CDN(內容分發(fā)網絡)加載壓縮后的Bootstrap的CSS文件(bootstrap.min.css)以獲得更好的性能。

    ? 但是,如果CDN出現(xiàn)故障或者出于某種原因,當應用程序無法訪問CDN的時候,我們希望應用程序不要訪問CDN,并從應用程序Web服務器加載壓縮后的Bootstrap文件。

    ? 很多開發(fā)框架都有這種功能,現(xiàn)在我們可以使用ASP.NET Core Environment TagHelper輕松實現(xiàn)這一點。在我們理解Environment TagHelper之前,我們先來了解如何設置應用程序環(huán)境的名稱。

    設置應用程序環(huán)境的名稱

    ? Environment TagHelper支持根據(jù)應用程序環(huán)境呈現(xiàn)不同的內容,它使用ASPNETCORE_ENVIRONMENT變量的值作為環(huán)境的名稱。

    ? 如果應用程序時Development ,則此示例加載沒有壓縮的bootstrap.css文件,代碼如下:

    <environment include="Development"><link href="~/lib/bootstrap/css/bootstrap.css" rel="stylesheet"/> </environment>

    ? 如果應用程序環(huán)境是Staging或者Production,則此示例從CDN加載壓縮后的bootstrap.min.css文件,代碼如下。

    <environment include="Staging,Production"><!-- CSS only --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous"> </environment>

    ? include屬性接受將單個環(huán)境名稱以逗號分隔的形式生成列表。在Environment TagHelper中還有exclude屬性,當托管環(huán)境與exclude屬性值中列出的環(huán)境名稱不匹配時,將呈現(xiàn)標簽中的內容。

    ? 如果應用程序不是Development,則從此示例從CDN加載壓縮后的bootstrap.min.css文件,代碼如下:

    <environment exclude="Development"><!-- CSS only --><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous"/></environment>

    ? <link>元素中的integrity屬性用于檢查子資源完整性。Subresource Integrity(SRI)是一種安全功能,允許瀏覽器檢查被檢索的文件是否被惡意更改。當瀏覽器下載文件時,它會重新計算散列值并將其與完整性屬性散列值進行比較。如果散列值匹配,則瀏覽器允許下載文件,否則將被阻止。

    如果CDN“掛了”,怎么辦

    ? 如果CDN出現(xiàn)故障或出于某種原因應用程序無法訪問CDN,則希望應用程序從應用程序Web服務求加載壓縮后的Bootstrap文件,代碼如下。

    <environment include="Development"><link href="~/lib/twitter-bootstrap/css/bootstrap.css" rel="stylesheet" /></environment><environment exclude="Development"><!-- CSS only --><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous" asp-fallback-href="~/lib/twitter-bootstrap/css/bootstrap.css" asp-fallback-test-class="sr-only" asp-fallback-test-property="positon" asp-fallback-test-value="absolute" asp-suppress-fallback-integrity="true" /></environment>

    ? 如果應用程序環(huán)境是Development,則從應用程序Web服務器加載沒有壓縮的bootstrap.css文件;如果應用程序環(huán)境不是Development,則從CDN加載縮小的bootstrap.min.css文件。

    ? 使用asp-fallback-href屬性指定回退源。這意味著,如果CDN關閉,則應用程序將回退并從應用程序Web服務器加載縮小的Bootstrap文件。

    ? 以下3個屬性及其相關值用于檢查CDN是否關閉。

    • asp-fallback-test-calss="sr-only"。
    • asp-fallback-test-propery="position"。
    • asp-fallback-test-value="absolute"。

    當然,這會設計計算散列值,并將其與文件的完整性屬性散列值進行比較。對于大多數(shù)應用程序,CDN失效的時候都是回退到它們自己的服務器,方法是將asp-suppress-fallback-integrity屬性設置為true,當然讀者也可以選擇關閉從本地服務器下載的文件完整性檢查。

    使用Bootstrap給項目添加導航菜單

    ? ?請注意,Bootstrap的所有Javascript插件都依賴于jQuery,因此jQuery必須在Bootstrap之前引入。讀者可以使用Libman管理工具下載jQuery,也可前去jQuery官網下載。

    布局頁面_Layout.cshtml的代碼

    <!DOCTYPE html><html> <head><meta name="viewport" content="width=device-width" /><environment include="Development"><link href="~/lib/twitter-bootstrap/css/bootstrap.css" rel="stylesheet" /><script src="~/lib/jquery/jquery.js"></script><script src="~/lib/twitter-bootstrap/js/bootstrap.js"></script></environment><environment exclude="Development"><!-- CSS only --><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous" asp-fallback-href="~/lib/twitter-bootstrap/css/bootstrap.css" asp-fallback-test-class="sr-only" asp-fallback-test-property="positon" asp-fallback-test-value="absolute" asp-suppress-fallback-integrity="true" /></environment><link href="~/css/site.css" rel="stylesheet" /><title>@ViewBag.Title</title> </head> <body><div class="container"><nav class="navbar navbar-expand-sm bg-dark navbar-dark"><a class="navbar-brand" asp-controller="home" asp-action="index"><img src="~/images/student.png" width="30" height="30" /></a><button class="navbar-toggler"type="button"data-toggle="collapse"data-target="#collapsibleNavbar"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse" id="collapsibleNavbar"><ul class="navbar-nav"><li class="nav-item"><a class="nav-link" asp-controller="home" asp-action="index">列表</a></li><li class="nav-item"><a class="nav-link" asp-controller="home" asp-action="create">創(chuàng)建</a></li></ul></div></nav>@RenderBody()</div>@if (IsSectionDefined("Scripts")){@RenderSection("Scripts", required: false)} </body> </html>

    ? 注意,對于非開發(fā)環(huán)境(Staging 、Production等),我們沒有使用所需的<link>元素來從CDN加載所需的Jquery和Bootstrap Javascript文件。

    ? 請注意,按鈕(查看、編輯、刪除)是相互連接在一起的,我們要在這些按鈕之間包含邊框,需使用Bootstrap提供的邊距類(m-1、m-2等)。在類名中,m代表邊距,數(shù)字1、2等代表所需空間的大小。

    ? 在Index.cshtml修改\<a>元素,使其包含m-1。

    Form TagHelpers 提交學生信息

    ?

    場景描述

    我們在ASP.NET Core中使用以下常用的TagHelpers創(chuàng)建表單。

    • Form TagHelper。
    • Label TagHelper。
    • Input TagHelper。
    • Selece TagHelper。
    • Textarea TagHelper。
    • Validation TagHelper。

    我們希望使用Form TagHelpers創(chuàng)建表單,并使用Bootstrap對其進行樣式設置,完成創(chuàng)建學生信息。

    ? 我們在HomeController中添加如下代碼。

    public IActionResult Create(){return View();}

    然后在路徑為Views/Homes/的文件夾中添加視圖Create.cshtml。

    Form TagHelper

    ? 要創(chuàng)建表單可以使用Form TagHelper。需要注意的是,我們實際是使用asp-controller和asp-action TagHelper。這兩個TagHelper指定控制器并在提交表單時將表單數(shù)據(jù)發(fā)布到指定的操作方法上。我們希望在提交表單時發(fā)出POST請求,因此將method屬性設置為post。

    <form asp-controller="home" asp-action="create" method="post"> </form>

    ? 從客戶端瀏覽器上呈現(xiàn)表單時,上面的代碼會生成以下HTML代碼。正如讀者在提交表單時從生成的HTML代碼中看到的那樣,它將被發(fā)布到HomeController的Index()方法中,編譯后打開源代碼可以看到渲染出來的HTML代碼。

    <form method="post" action="/home/create"></form>

    ? 請注意,默認情況下在提交表單時,它將被發(fā)布到當前頁面表單的控制器的操作方法中。這意味著,即使我們沒有使用asp-controller和asp-action TagHelper指定對應的控制器和操作方法,表單仍然被發(fā)布到HomeController的Index()方法中,但是建議寫的時候還是顯示聲明。

    Input TagHelper

    ? Input TagHelper將HTML中的<input>元素綁定到Razor視圖中的模型表達式。

    ? 在我們的例子中想要設計一個表單來創(chuàng)建新學生信息。因此,Create.cshtml視圖的模型是Student類,需要使用@model 指令,即@model Student 。

    ? 為了獲取學生姓名,我們需要一個文本框并將其綁定到Student模型類的Name屬性。我們使用asp-for TagHelper將input的屬性值設置為Student模型類的name屬性。

    ? 請注意,Visual Studio會提供智能提示。如果在Student類上將屬性名稱Name更改為FullName,但不更改分配給的TagHelper的值,則會出現(xiàn)編譯器錯誤。

    <input asp-for="Name" />

    ? 上面的代碼會生成一個帶有id和name屬性的<input>元素。請注意,它們的值均為Name。

    <input type="text" id="Name" name="Name" value="" />

    ? name屬性是必須的,它用于在提交表單時將輸入元素的值映射到模型類的對應屬性。這是通過ASP.NET Core中稱為模型綁定的過程完成的。

    ?

    Label TagHelper

    ? Label TagHelper會生成帶有for屬性的標簽。屬性鏈接與和它相關的輸入元素的標簽進行綁定,代碼如下。

    <label asp-for="Name"></label> <input asp-for="Name" />

    上面的代碼生成以下HTML代碼:

    <label for="Name">Name</label> <input type="text" id="Name" name="Name" value="" />

    ? Label標簽鏈接到input標簽,因為這兩種標簽的屬性和input標簽的id屬性具有相同的值(Name)。

    ? 同樣,以下代碼生成<label>和<input>元素以獲取學生的電子郵箱。

    <label asp-for="Email"></label> <input asp-for="Email" />

    Select TagHelper

    ? Select TagHelper會生成select標簽及其關聯(lián)的元素。在我們的例子中需要通過select顯示主修科目列表。最后,我們需要一個select標簽和一個帶有主修科目選項列表的元素,如下所示。

    <label for="Major">主修科目</label> <select id="Major" name="Major"><option value="0">計科</option><option value="1">信安</option><option value="2">網工</option> </select>

    ? 主修科目的元素的選項內容可以像上面的示例中那樣進行硬編碼,也可以來自枚舉或數(shù)據(jù)庫表。我們還沒有連接數(shù)據(jù)庫,因此,對于我們的示例可以從枚舉中獲取選項。

    ? 我們在Models/EnumTypes的文件夾中創(chuàng)建一個MajorEnum.cs枚舉類。

    public enum EnumTypes{None,FirstGrade,SecondGrade,GradeThree}

    ? 修改Models文件夾中Student.cs文件的代碼,將Major屬性數(shù)據(jù)類型改為MajorEnum。在Create.cshtml視圖中添加以下代碼。

    <label asp-for="Major"></label> <select asp-for="Major" asp-items="Html.GetEnumSelectList<MajorEnum>()"> </select>

    ? 請注意,我們使用asp-items屬性值幫助程序和Html.GetEnumsSelectList<MajorEnum>()獲取<select>元素的選項。

    ? 上面的代碼生成以下HTML代碼。

    <label for="Major">Major</label> <select data-val="true" data-val-required="The Major field is required." id="Major" name="Major"><option value="0">None</option><option value="1">FirstGrade</option><option value="2">SecondGrade</option><option value="3">GradeThree</option> </select>

    Create.cshtml中基本的HTML代碼

    @model Student @{ ViewBag.Title = "創(chuàng)建學生信息"; }<form asp-controller="home" asp-action="create" method="post" ><div><label asp-for="Name" ></label> <input asp-for="Name"/></div><div><label asp-for="Email"></label><input asp-for="Email"/></div><div><label asp-for="Major"></label><select asp-for="Major"asp-items="Html.GetEnumSelectList<MajorEnum>()"><option value="">請選擇</option></select></div><button type="submit">創(chuàng)建</button> </form>

    ? 以上的代碼會生成以下的HTML代碼。

    <form method="post" action="/home/create"><div><label for="Name">Name</label><input type="text" id="Name" name="Name" value="" /></div><div><label for="Email">Email</label><input type="text" id="Email" name="Email" value="" /> </div><div><label for="Major">Major</label><select data-val="true" data-val-required="The Major field is required." id="Major" name="Major"><option value="">請選擇</option><option value="0">None</option><option value="1">FirstGrade</option><option value="2">SecondGrade</option><option value="3">GradeThree</option> </select> </div><button type="submit" class="btn btn-primary">創(chuàng)建</button><input name="__RequestVerificationToken" type="hidden" value="CfDJ8IVmefmn13tElsuhIOlxBd9qxTAKjc5MLl_DnUHtxiZb-ztIjcXBKCtrVcKqrDEmn17EthiSYdJ8fxT6emkGJopOw5HrMAKYZOEg-4khyt_WLv8rEhhTqGLRm73T8eS1Lx8RcxZJ_jnEQEVwulC-eC4" /> </form>

    運行后效果如圖所示:

    ? 這就是基本的HTML代碼生成的效果,這里功能是有了,但是美化并不好,因此要對它進行優(yōu)化。現(xiàn)在使用Bootstrap進行優(yōu)化。

    Bootstrap優(yōu)化后的Create.cshtml的代碼

    @model Student @{ ViewBag.Title = "創(chuàng)建學生信息"; }<form asp-controller="home" asp-action="create" method="post" class="mt-3"><div asp-validation-summary="All" class="text-danger"></div><div class="form-group row"><label asp-for="Name" class="col-sm-2 col-form-label"></label><div class="col-sm-10"><input asp-for="Name" class="form-control" placeholder="請輸入名字" /><span asp-validation-for="Name" class="text-danger"></span></div></div><div class="form-group row"><label asp-for="Email" class="col-sm-2 col-form-label"></label><div class="col-sm-10"><input asp-for="Email" class="form-control" placeholder="請注入郵箱地址" /><span asp-validation-for="Email" class="text-danger"></span></div></div><div class="form-group row"><label asp-for="Major" class="col-sm-2 col-form-label"></label><div class="col-sm-10"><select asp-for="Major"class="custom-select mr-sm-2"asp-items="Html.GetEnumSelectList<MajorEnum>()"><option value="">請選擇</option></select><span asp-validation-for="Major" class="text-danger"></span></div></div><div class="form-group row"><div class="col-sm-10"><button type="submit" class="btn btn-primary">創(chuàng)建</button></div></div></form>

    運行后,效果如圖所示:

    ? 至此,我們的Create頁面做完了。雖然是一個簡單的頁面,但我們用到的組件一點也不少。

    總結

    以上是生活随笔為你收集整理的ASP.NET Core中的TagHelper及其用法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。