ASP.NET Core etiket yardımcıları
Gönderen Rick Anderson
Etiket Yardımcıları nelerdir
Etiket Yardımcıları, sunucu tarafı kodun dosyalarda HTML öğeleri oluşturma ve işlemeye katılmasını sağlar Razor . Örneğin yerleşik, ImageTagHelper görüntü adına bir sürüm numarası ekleyebilir. Görüntü her değiştiğinde, sunucu görüntü için yeni bir benzersiz sürüm oluşturur, bu nedenle istemcilerin geçerli görüntüyü alma garantisi vardır (eski önbelleğe alınmış bir görüntü yerine). yaygın görevler için çok sayıda yerleşik etiket yardımcıları vardır. örneğin, formları, bağlantıları, yükleme varlıklarını ve daha fazlasını ve daha fazlasını ortak GitHub depolarında ve NuGet paketler halinde bulabilirsiniz. Etiket Yardımcıları C# dilinde yazılır ve öğe adı, öznitelik adı veya üst etikete göre HTML öğelerini hedefler. Örneğin, LabelTagHelper öznitelikler uygulandığında YERLEŞIK HTML öğesini hedefleyebilir <label> LabelTagHelper . HTML Yardımcılarıhakkında bilginiz varsa etiket yardımcıları, görünümlerde HTML ve C# arasındaki açık geçişleri azaltır Razor . Birçok durumda, HTML Yardımcıları belirli bir etiket Yardımcısı için alternatif bir yaklaşım sağlar, ancak bu etiket yardımcıların HTML yardımcılarını değiştirmez ve her HTML Yardımcısı için bir etiket Yardımcısı olmadığını bilmek önemlidir. HTML yardımcılarına kıyasla etiket yardımcıları daha ayrıntılı olarak açıklanır.
Hangi etiket yardımcıları sağlar
HTML kullanımı kolay bir geliştirme deneyimi
Çoğu bölümde, Razor Etiket Yardımcıları kullanan biçimlendirme standart HTML gibi görünür. Ön uç tasarımcıları HTML/CSS/JavaScript ile, Razor C# sözdizimi öğrenmeksizin düzenleyebilir Razor .
HTML ve biçimlendirme oluşturmak için zengin bir IntelliSense ortamı Razor
Bu, HTML yardımcılarından daha keskin karşıtlıkla birlikte, görünümlerde biçimlendirme sırasında sunucu tarafı oluşturma yaklaşımına sahiptir Razor . HTML yardımcılarına kıyasla etiket yardımcıları daha ayrıntılı olarak açıklanır. Etiket Yardımcıları Için IntelliSense desteği , IntelliSense ortamını açıklar. C# sözdizimiyle karşılaşılan geliştiricilerin bile Razor , c# işaretlemesi yazmadan etiket yardımcıları kullanılarak daha üretken olma Razor .
Daha üretken olmanızı sağlamak ve yalnızca sunucuda bulunan bilgileri kullanarak daha sağlam, güvenilir ve sürdürülebilir kodlar elde etmek için bir yol
Örneğin, geçmişe dönük olarak görüntülerin güncelleştirilmesi, görüntüyü değiştirdiğinizde görüntünün adını değiştiriydi. Görüntülerin performans nedenleriyle bir şekilde ön belleğe alınması gerekir ve bir görüntünün adını değiştirmediğiniz takdirde, istemcilerin eski bir kopya alıyor olması risklidir. Tarihsel olarak, bir görüntü düzenlendikten sonra ad değiştirilmelidir ve Web uygulamasındaki görüntünün güncellenmesi için gereken her başvuru. Bu çok işçiliği yoğun bir şekilde değil, bu da hataya açıktır (bir başvuruyu kaçırmanızı, yanlışlıkla yanlış dize girmeniz vb.) Yerleşik, ImageTagHelper sizin için otomatik olarak bunu yapabilir. Görüntü ImageTagHelper adına bir sürüm numarası ekleyebilir, böylece görüntü her değiştiğinde sunucu otomatik olarak görüntü için yeni bir benzersiz sürüm oluşturur. İstemcilerin geçerli görüntüyü alması garanti edilir. Bu sağlamlık ve işgücü tasarrufu, ile birlikte ücretsizdir ImageTagHelper .
Çoğu yerleşik etiket yardımcıları standart HTML öğelerini hedefleyin ve öğesi için sunucu tarafı öznitelikleri sağlar. Örneğin, <input> Görünümler/hesap klasöründeki birçok görünümde kullanılan öğesi asp-for özniteliği içerir. Bu öznitelik, belirtilen model özelliğinin adını işlenmiş HTML içine ayıklar. RazorAşağıdaki modelle bir görünüm düşünün:
public class Movie
{
public int ID { get; set; }
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
public decimal Price { get; set; }
}
Aşağıdaki Razor biçimlendirme:
<label asp-for="Movie.Title"></label>
Aşağıdaki HTML 'yi oluşturur:
<label for="Movie_Title">Title</label>
asp-forÖzniteliği, içindeki özelliği tarafından kullanılabilir hale getirilir For LabelTagHelper . Daha fazla bilgi için bkz. Yazar etiketi yardımcıları .
Etiket Yardımcısı kapsamını yönetme
Etiket Yardımcıları kapsamı @addTagHelper ,, @removeTagHelper ve "!" geri çevirme karakterinin bir birleşimi tarafından denetlenir.
@addTagHelper Etiket Yardımcıları kullanılabilir hale getirir
authoringtaghelmakaadı adlı yeni bir ASP.NET Core web uygulaması oluşturursanız, projenize aşağıdaki görünümler/_ViewImports. cshtml dosyası eklenecektir:
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, AuthoringTagHelpers
@addTagHelperYönerge, etiket yardımcılarını görünüm için kullanılabilir hale getirir. Bu durumda, görünüm dosyası sayfalar /_ViewImports. cshtml'dir ve varsayılan olarak Sayfalar klasörü ve alt klasörlerdeki tüm dosyalar tarafından devralınır. Etiket Yardımcıları kullanılabilir hale getirme. Yukarıdaki kod, * belirtilen derlemedeki tüm etiket yardımcılarını (Microsoft. Aspnetcore. Mvc. Taghelmakat), Görünümler dizinindeki veya alt dizininde bulunan her görünüm dosyası için kullanılabilir olacağını belirtmek için joker karakter sözdizimini ("") kullanır. Sonraki ilk parametre, @addTagHelper yüklenecek etiket yardımcıları (" * " tüm etiket yardımcıları için kullanıyoruz) ve ikinci parametre olan "Microsoft. aspnetcore. Mvc. Taghel,", etiket yardımcıları içeren derlemeyi belirtir. Microsoft. aspnetcore. Mvc. taghelmakatem , yerleşik ASP.NET Core etiket yardımcıları için derlemedir.
Bu projedeki tüm etiket yardımcılarını ortaya çıkarmak için ( Authoringtaghelmakatı adlı bir derleme oluşturur), aşağıdakileri kullanın:
@using AuthoringTagHelpers
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, AuthoringTagHelpers
Projeniz EmailTagHelper varsayılan ad alanı () ile bir içeriyorsa AuthoringTagHelpers.TagHelpers.EmailTagHelper , etiket yardımcısından tam nitelikli adı (FQN) sağlayabilirsiniz:
@using AuthoringTagHelpers
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper AuthoringTagHelpers.TagHelpers.EmailTagHelper, AuthoringTagHelpers
Bir FQN kullanarak bir görünüme bir etiket Yardımcısı eklemek için, önce FQN ( AuthoringTagHelpers.TagHelpers.EmailTagHelper ) ve ardından derleme adı (Authoringtaghelmakaı) eklersiniz. Çoğu geliştirici " * " joker sözdizimini kullanmayı tercih eder. Joker karakter sözdizimi "" joker karakterini * BIR FQN soneki olarak eklemenize olanak tanır. Örneğin, aşağıdaki yönergelerden herhangi biri içine alınacaktır EmailTagHelper :
@addTagHelper AuthoringTagHelpers.TagHelpers.E*, AuthoringTagHelpers
@addTagHelper AuthoringTagHelpers.TagHelpers.Email*, AuthoringTagHelpers
Daha önce bahsedildiği gibi, @addTagHelper views/_ViewImports. cshtml dosyasına yönergesini eklemek etiket Yardımcısı ' nı Görünümler dizinindeki ve alt dizinlerindeki tüm görünüm dosyaları için kullanılabilir hale getirir. @addTagHelperEtiketi yardımcısını yalnızca bu görünümlerde kullanıma sunmak istiyorsanız, belirli görünüm dosyalarında yönergesini kullanabilirsiniz.
@removeTagHelper Etiket Yardımcıları kaldırır
, İle @removeTagHelper aynı iki parametreye sahiptir @addTagHelper ve daha önce eklenmiş bir etiket yardımcısını kaldırır. Örneğin, @removeTagHelper belirli bir görünüme uygulandığında, belirtilen etiket Yardımcısı görünümden kaldırılır. @removeTagHelperBir views/Folder/_ViewImports. cshtml dosyasında kullanmak, belirtilen etiket yardımcısını klasördeki tüm görünümlerden kaldırır.
Etiket Yardımcısı kapsamını _ViewImports. cshtml dosyası ile denetleme
Herhangi bir görünüm klasörüne _ViewImports. cshtml ekleyebilirsiniz ve Görünüm altyapısı, bu dosya ve Görünümler/_ViewImports. cshtml dosyasından yönergeleri uygular. Görünümler için boş bir Görünümler/ Home /_ViewImports. cshtml dosyası eklediyseniz Home , _ViewImports. cshtml dosyası eklenebilir olduğundan hiçbir değişiklik olmaz. @addTagHelper Görünümler/ Home /_ViewImports. cshtml dosyasına ekleyeceğiniz tüm yönergeler (varsayılan görünümlerde/_ViewImports. cshtml dosyasında değil), bu etiket yardımcılarını yalnızca klasöründe görünümler halinde kullanıma sunar Home .
Ayrı öğelerin dışında tutma
Etiket Yardımcısı geri çevirme karakteriyle ("!") birlikte öğe düzeyinde bir etiket yardımcısını devre dışı bırakabilirsiniz. Örneğin, Email doğrulama, <span> etiket Yardımcısı geri çevirme karakteriyle birlikte öğesinde devre dışıdır:
<!span asp-validation-for="Email" class="text-danger"></!span>
Açılış ve kapanış etiketine etiket Yardımcısı geri çevirme karakterini uygulamanız gerekir. (açma etiketine bir tane eklediğinizde Visual Studio düzenleyicisi, kapatma etiketini otomatik olarak ekler. Kabul etme karakterini ekledikten sonra, öğe ve etiket Yardımcısı öznitelikleri artık farklı bir yazı tipinde gösterilmez.
@tagHelperPrefixEtiket Yardımcısı kullanımını açık hale getirmek için kullanma
@tagHelperPrefixYönergesi etiket Yardımcısı desteğini etkinleştirmek ve etiket Yardımcısı kullanımını açık hale getirmek için bir etiket öneki dizesi belirtmenize olanak tanır. Örneğin, aşağıdaki biçimlendirmeyi views/_ViewImports. cshtml dosyasına ekleyebilirsiniz:
@tagHelperPrefix th:
Aşağıdaki kod görüntüsünde, etiket Yardımcısı ön eki olarak ayarlanır; th: Bu nedenle yalnızca öneki kullanan öğeler th: Etiket Yardımcıları destekler (etiket Yardımcısı etkin öğeleri farklı bir yazı tipine sahiptir). <label>Ve <input> öğeleri etiket Yardımcısı ön ekine sahiptir ve etiket Yardımcısı etkindir, ancak <span> öğesi değildir.

İçin de geçerlidir aynı hiyerarşi kuralları @addTagHelper için geçerlidir @tagHelperPrefix .
Kendi kendine kapanan etiket yardımcıları
Birçok etiket yardımcıları, kendinden kapanış etiketleri olarak kullanılamaz. Bazı etiket yardımcıları, kendinden kapanış etiketleri olacak şekilde tasarlanmıştır. Kendi kendini kapatmak üzere tasarlanmamış bir etiket Yardımcısı kullanılması işlenmiş çıktıyı bastırır. Bir etiket Yardımcısı kendinden kapanış, işlenen çıktıda kendi kendine kapanan bir etikete neden olur. Daha fazla bilgi için bkz. etiket yardımcılarını yazma.
Etiket Yardımcıları özniteliğinde/bildiriminde C#
Etiket Yardımcıları, öğenin özniteliğinde veya etiket bildirim alanında C# ' ın kullanılmasına izin vermez. Örneğin, aşağıdaki kod geçerli değildir:
<input asp-for="LastName"
@(Model?.LicenseId == null ? "disabled" : string.Empty) />
Yukarıdaki kod şöyle yazılabilir:
<input asp-for="LastName"
disabled="@(Model?.LicenseId == null)" />
Etiket Yardımcıları için IntelliSense desteği
Visual Studio yeni bir ASP.NET Core web uygulaması oluşturduğunuzda, "Microsoft. aspnetcore.. NuGet paketini ekler. Razor Araçlar ". Bu, etiket Yardımcısı araçları ekleyen pakettir.
Bir HTML öğesi yazmayı düşünün <label> . <lVisual Studio düzenleyicide girdiğiniz anda ıntellisense, eşleşen öğeleri görüntüler:

Yalnızca HTML Yardımı ( @" symbol with " bunun altındaki "<>") alınamaz.

Simge, öğeyi etiket yardımcıları tarafından hedeflenen şekilde tanımlar. Saf HTML öğeleri (gibi fieldset ) "<>" simgesini görüntüler.
saf html <label> etiketi, html etiketini (varsayılan Visual Studio color teması ile) bir kahverengi yazı tipinde, kırmızı olan özniteliklere ve öznitelik değerlerini mavi olarak görüntüler.

Girdikten sonra <label , IntelliSense KULLANILABILIR HTML/CSS özniteliklerini ve etikete yardımcı hedeflenen öznitelikleri listeler:

IntelliSense deyimi tamamlama, deyimi seçili değerle tamamlamak için sekme anahtarını girmenize olanak sağlar:

Etiket Yardımcı özniteliği girilir girilir, etiket ve öznitelik yazı tipleri değişir. "Mavi" Visual Studio "Açık" renk temasını kullanan yazı tipi kalın mordur. "Koyu" temayı kullanıyorsanız yazı tipi kalın yazı tipi olur. Bu belgede yer alan görüntüler varsayılan tema kullanılarak alındı.

Visual Studio CompleteWord kısayolunu girebilirsiniz (Ctrl +ara çubuğu, çift tırnak ("") içinde varsayılandır ve C# sınıfında olduğu gibi artık C# içindesiniz. IntelliSense, sayfa modelinde tüm yöntemleri ve özellikleri görüntüler. Özellik türü olduğundan yöntemleri ve özellikleri ModelExpression kullanılabilir. Aşağıdaki görüntüde görünümü Register düzenliyorum, bu nedenle RegisterViewModel kullanılabilir.

IntelliSense, sayfada model için kullanılabilen özellikleri ve yöntemleri listeler. Zengin IntelliSense ortamı CSS sınıfını seçmenize yardımcı olur:


ETIKET Yardımcıları ile HTML Yardımcıları karşılaştırması
Etiket Yardımcıları görünümlerde HTML öğelerine iliştirirken, HTML Yardımcıları görünümlerde Razor HTML ile kesişen yöntemler olarak Razor çağrılır. CSS sınıfı Razor "caption" ile bir HTML etiketi oluşturan aşağıdaki işaretlemeyi göz önünde bulundurmalısınız:
@Html.Label("FirstName", "First Name:", new {@class="caption"})
at ( @ ) simgesi bunun Razor kodun başlangıcı olduğunu söyler. Sonraki iki parametre ("FirstName" ve "First Name:") dizedir, bu nedenle IntelliSense yardımcı olmaz. Son bağımsız değişken:
new {@class="caption"}
Öznitelikleri temsil etmek için kullanılan anonim bir nesnedir. C# içinde ayrılmış anahtar sözcük olduğundan, sembolünü kullanarak C#'yi simge (özellik adı) olarak class @ @class= yorumlamaya zorlarsınız. Ön uç tasarımcısı için (HTML/CSS/JavaScript ve diğer istemci teknolojileri hakkında bilgi sahibi olan ancak C# ve hakkında bilgi sahibi olmayan biri) satırın Razor çoğu yabancıdır. Satırın tamamının IntelliSense'in yardımı gerekmeden yazması gerekir.
kullanılarak LabelTagHelper aynı işaretleme şu şekilde yaz olabilir:
<label class="caption" asp-for="FirstName"></label>
Etiket Yardımcı sürümü ile, düzenleyiciye girer girmez <l IntelliSense Visual Studio öğeleri görüntüler:

IntelliSense, satırın tamamını yazmanıza yardımcı olur.
Aşağıdaki kod görüntüsü, ASP.NET 4.5.x MVC şablonundan oluşturulan Views/Account/Register.cshtml görünümünün Form Razor bölümünü Visual Studio.

Bu Visual Studio C# kodunu gri bir arka plan ile görüntüler. Örneğin, AntiForgeryToken HTML Yardımcısı:
@Html.AntiForgeryToken()
gri bir arka plan ile görüntülenir. Yazmaç görünümündeki işaretlemelerin çoğu C# olur. Etiket Yardımcılarını kullanarak bunu eşdeğer yaklaşımla karşılaştırın:

Biçimlendirme, HTML Yardımcıları yaklaşımından çok daha temiz ve okuması, düzenlemesi ve bakımını yapmak daha kolaydır. C# kodu, sunucunun bilmek zorunda olduğu en düşük değere indir indirildi. Bu Visual Studio düzenleyici, bir Etiket Yardımcısı tarafından hedeflenen işaretlemeyi farklı bir yazı tipiyle görüntüler.
E-posta grubunu düşünün:
<div class="form-group">
<label asp-for="Email" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Email" class="form-control" />
<span asp-validation-for="Email" class="text-danger"></span>
</div>
</div>
"asp-" özniteliklerinin her biri "Email" değerine sahip ancak "Email" bir dize değil. Bu bağlamda "Email", için C# model ifadesi RegisterViewModel özelliğidir.
Visual Studio düzenleyicisi, yazmacı formunun Etiket Yardımcı yaklaşımındaki tüm işaretlemeleri yazmanıza yardımcı olurken, Visual Studio HTML Yardımcıları yaklaşımındaki kodun çoğu için yardım sağlar. Etiket Yardımcıları için IntelliSense desteği, düzenleyicide Etiket Yardımcıları ile çalışma hakkında Visual Studio ele alınmaktadır.
Web Sunucusu Denetimleriyle Karşılaştırıldığında Etiket Yardımcıları
Etiket Yardımcıları ilişkilendirilen öğeye sahip değildir; yalnızca öğenin ve içeriğin işlemeye katılmalarıdır. ASP.NET Web Sunucusu Denetimleri bir sayfada bildir ve çağrılır.
ASP.NET Web Sunucusu Denetimlerinin geliştirmeyi ve hata ayıklamayı zorlaştırarak önemsiz olmayan bir yaşam döngüsü vardır.
Web Sunucusu denetimleri, istemci denetimi kullanarak istemci Belge Nesne Modeli (DOM) öğelerine işlevsellik eklemenize olanak sağlar. Etiket Yardımcıları'nın DOM'sı yoktur.
Web Sunucusu denetimleri otomatik tarayıcı algılamayı içerir. Etiket Yardımcılarının tarayıcı hakkında bilgisi yoktur.
Genellikle Web Sunucusu denetimleri oluşturarken birden çok Etiket Yardımcısı aynı öğe üzerinde eylemde olabilir (bkz. Etiket Yardımcı çakışmalarını önleme).
Etiket Yardımcıları kapsamına alan HTML öğelerinin etiketini ve içeriğini değiştirebilir, ancak bir sayfada başka hiçbir şeyi doğrudan değiştirmez. Web Sunucusu denetimlerinin kapsamı daha azdır ve sayfanın diğer bölümlerini etkileyen eylemler gerçekleştirebilirsiniz; , intended yan etkileri etkinleştirme.
Web Sunucusu denetimleri, dizeleri nesnelere dönüştürmek için tür dönüştürücüleri kullanır. Etiket Yardımcıları ile C# içinde yerel olarak çalışır, bu nedenle tür dönüştürmesi yapmak zorunda olmazsiniz.
Web Sunucusu denetimleri, bileşenlerin ve denetimlerin çalışma zamanı ve tasarım zamanı davranışını uygulamak için System.ComponentModel kullanır.
System.ComponentModelöznitelikleri ve tür dönüştürücülerini uygulamaya, veri kaynaklarına bağlamaya ve lisans bileşenlerini uygulamaya için temel sınıfları ve arabirimleri içerir. Bunu, genellikle 'den türetilen Etiket Yardımcıları'nın aksine, temel sınıf ise yalnızca iki yöntem (ve)TagHelperTagHelperortayaProcessProcessAsyncçıkarır.
Etiket Yardımcı öğesi yazı tipini özelleştirme
Yazı tipini ve renklendirmeyi Araçlar Seçenekler Ortam Yazı Tipleri > ve > Renkler'den > özelleştirebilirsiniz:

Yerleşik ASP.NET Çekirdek Etiketi Yardımcıları
Dağıtılmış Önbellek Etiketi Yardımcı
Doğrulama İletisi Etiketi Yardımcı
Doğrulama Özeti Etiketi Yardımcı
Ek kaynaklar
- Etiket Yardımcıları Yazma
- Formlarla Çalışma
- GitHub TagHelperSamples, Bootstrapile çalışmak için Etiket Yardımcı örneklerini içerir.