ASP.NET MVC'deki Razor Görüntülemelerine Giriş

ASP.NET MVC, Microsoft yığınında web geliştirmenin bir temel taşı olmaya devam ediyor, endişelerin ve iyi niyetli kontrol HTTP yanıtlarının üzerinden temiz bir ayrılık sunuyor.Görünüsel MVC uygulamaları kalbinde, C# kodlarını sorunsuzca kopyalatmanıza izin veren güçlü bir geçici sözcülüğü var. Razor views (files with theOSPT:0) uzantılı HTML içeriği modern ASP.NET MVC uygulamaları.You to dönüştürmenizi sağlar.

Bu genişletilmiş kılavuz, Razor görüşlerine daha derin bir şekilde dalıyor, sözcülüğü, model bağlayıcı, geçerlilik entegrasyonu ve performans en iyi uygulamaları oluşturuyorsanız veya büyük ölçekli bir kamu web sitesi kurmanız, Razor'u korumak, performansa uygun, performansa yardımcı olacaktır.

Razor Görüntüleme Nedir?

Razor görüşleri HTML işaretini C# kodu ile birleştiren sunucu-side şablonları.Bir kullanıcı bir URL talep ettiğinde, MVC boru hattı, bir kontrol işlemine talep eder.Bu eylem genellikle aİLFLT:1 olarak adlandırılır.) çerçeve o zaman karşılık gelenFLT:3'u bulur ve bu dizeyi istemcinin tarayıcıya gönderir.

Anahtar fayda, Razor'un aralıkta veya derleme zamanında .NET sınıflarına ilişkin görüşlerini derlemesidir (Proje yapılandırmasına bağlı olarak), döngüler, koşullular, karmaşık ifadeler ve hatta istisna işlemleri dahil olmak üzere .NET runtime'nin tam gücünü kullanmanıza izin verir.

Örneğin, basit bir Razor görüşü bu şekilde görünebilir:

@{
 ViewBag.Title = "Home Page";
}

<h1>Welcome to @ViewBag.Title</h1>
<p>The current server time is @DateTime.Now.ToLongTimeString().</p>

HTML'den C#. TheİLFLT:6'ye geçiş gösteren her şey, C# kodun sona erdiğini ve HTML özgeçmişlerinin, hatta uzayların, ebeveynliklerin veya HTML etiketinin sınırlarının altında olduğunu belirtmek için yeterince akıllıdır.

Razor Syntax Deep Dive

Etkili Razor görüşlerini yazmak için, mevcut çeşitli kod blok stillerini ve ifade modlarını anlamanız gerekir.

Inline Expressions

En basit form, tek bir GÜNCÜSÜŞÜNÜŞÜNÜŞÜNCÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞ

<p>Your account balance is @balance.ToString("C2")</p>

Eğer ifade bir dördD 9 döndürürse veya uygulamalar[/FONT=) Razor, çıktıyı HTML-encode the print-encodes the value to prevent cross-site scripting (XSS) vulnerabilities önlemek için değeri otomatik olarak döndürür.

Kod Blokları

UseFLT:11) Çok devletli C# bloklarını yazmak için bir çift kör paralı paralı parantez tarafından takip edildi:

@{
 var greeting = "Hello";
 var name = "World";
 var message = greeting + ", " + name + "!";
}
<p>@message</p>

Kod blokları içinde, değişkenleri, arama yöntemlerini söyleyebilir ve mantık gerçekleştirebilirsiniz. Paraziğin dışındaki HTML hala sıraya verilir.

Kontrol Yapıları

Razor standart C# kontrol akış anahtar kelimelerini [Ücretsizler) desteklemektedir, [[Çeçek: 16) ve [[Üye Olmayanlar İçin Bir Kod (En İyi Uygulama) tarafından takip edilen ve takip edilenler, her zaman belirsizliği önlemek için para birimini kullanır:

@if (Model.IsAuthenticated)
{
 <span>Welcome back, @Model.UserName!</span>
}
else
{
 <a href="/Account/Login">Log in</a>
}

Benzer şekilde, döngüler doğal olarak bütünleştirir:

<ul>
@foreach (var item in Model.Items)
{
 <li>@item.Name (@item.Price.ToString("C"))</li>
}
</ul>

Not that theFLETHT:23), sadece açılış anahtar kelime üzerinde gereklidir. kapanış brace düz C# ve Razor doğru özgeçmişleri HTML ile karşılaşıldığında doğru özgeçmişler HTML.

Yorumlar

Razor, sunulan HTML'den gelen kutuların içeriğini tamamen sunan kendi yorumlarını sunar:

@* This is a Razor comment. It will not appear in the output. *@

HTML yorumları ([Dönemli: 4 ) hala tarayıcıya gönderilir ve kaynakta görünür. Geliştirici notları için Razor yorumları kullanın veya geçici olarak devre dışı bırakmak için.

Özel Karakterler

Bir gerçek anlamda bir işaret göstermek için, [[Gerçeği kullanmak, İZMİRİ DERECEKİ SİZİ KENDİĞİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KENDİ KEN

Güçlü-Typed Views ve Model Binding

ASP.NET MVC'deki en güçlü desenlerden biri, modelin özelliklerini kullanarak örnekleyici bir şekilde kullanıyor.

@model IEnumerable<Product>

<h2>Product List</h2>
<table class="table">
 <thead>
 <tr>
 <th>Name</th>
 <th>Price</th>
 </tr>
 </thead>
 <tbody>
 @foreach (var product in Model)
 {
 <tr>
 <td>@product.Name</td>
 <td>@product.Price.ToString("C")</td>
 </tr>
 }
 </tbody>
</table>

Kontrol, modeli ESFLT:34 ile geçer:

public ActionResult Products()
{
 var products = db.Products.ToList();
 return View(products);
}

Güçlü görüşler ayrıca model bağlayıcısı ile form teklifleri basitleştirir. Bir form yayınlandığında, MVC çerçevesi otomatik olarak kontrol edilen eylemdeki model parametresinin özelliklerini talep eder, giriş isimlerinin model mülk isimlerini eşleştirir.

ViewBag, ViewData ve TempData

Güçlü tip modeller tercih edilirken, çerçeve aynı zamanda kontroller ve görüşler arasındaki verileri geçmek için tanımlayıcı olmayan konteynerler sunar:

  • [FONT:0)ViewBag:[Dönetici:[Dönetici:0)) Bir dinamik nesne, keyfi özellikleri ayarlamanıza izin verir. Örnek: [[Üye Erişim: 03.03.2012.
  • [FONT:0)ViewData:[Dönetici:[Dönemli çiftlerin bir sözlüğü ([Dönemli: 0,4)) Değerler, güçlü bir tipte ihtiyacınız varsa uygun şekilde kullanılmalıdır.
  • [FONT:0]TempData:[Dönetici]Data'yı görüntülemek için benzer bir şekilde takip edilir, ancak oturumda saklanır ve "Record'un başarıyla kurtarıldığı bir mesaj görüntülemek için kullanışlıdır.

Bu mekanizmaların kullanımı, aşırı görüntülemeBag, zaman hatalarına yol açabilir ve onları nadiren ana modele uymayan yardımcı verilere ihtiyaç duyar.

Layouts and ViewStart

Layouts uygulamanızı tutarlı bir görünüm ve ortak bir master sayfası tanımlamakla hissettirir. Bir düzen bir sayfanın dış yapısını içeren bir dosyadır (öner, navigasyon, ayaker) ve aurFLT:42).

Örneğin, tipik bir [[DÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜ

<!DOCTYPE html>
<html>
<head>
 <title>@ViewBag.Title - My App</title>
 @Styles.Render("~/Content/css")
</head>
<body>
 <nav>...</nav>
 <main>
 @RenderBody()
 </main>
 <footer>...</footer>
 @Scripts.Render("~/bundles/js")
 @RenderSection("Scripts", required: false)
</body>
</html>

Bireysel görüş, hangi düzeni kullanacağını belirtebilir. - Kongre tarafından, [[ŞUYUMLAR: 46.) klasörün tüm görüşleri için varsayılan düzeni ayarlar:

@{
 Layout = "~/Views/Shared/_Layout.cshtml";
}

Herhangi bir özel görüşte, [[ ⁇ DÜŞÜŞÜŞÜŞÜŞÜŞÜK-Yönekme'ye ait olan sayfalar için özellikle kullanışlıdır.Bu, giriş sayfaları veya hata sayfaları gibi tamamen farklı bir düzene ihtiyaç duyan sayfalar için yararlıdır.

Katılımcı Görüntüleme ve Görünüşler

Kısmen görüşler, diğer görüşlere gömülü olabilecek UI'nin yeniden kullanılabilir parçalarıdır. Özellikle karmaşık formlar, liste öğeleri veya birden çok yerde görünen herhangi bir bileşen için faydalıdır. kısmi bir görüş oluşturmak için, sadece bir algT:49'u oluşturur.

Başka bir görüşe göre, [[DÜŞÜŞÜNÜŞÜŞÜŞÜŞÜNÜŞÜŞÜNÜŞÜŞÜŞÜNÜŞÜNÜŞÜŞÜŞÜNÜŞÜNÜŞÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜŞÜŞÜNÜŞÜŞÜŞÜNÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜNÜŞÜŞÜŞÜŞÜNÜŞÜNÜŞÜŞÜŞÜNÜŞÜŞÜŞÜŞÜŞÜNÜŞÜNÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜNÜ

@Html.Partial("_ProductCard", item)

Fark, HTML dizesini döndürürken, [[FONTD:55] doğrudan yanıt akışına (büyük kısmiler için hafif olarak daha hızlı yazar, ancak bir kod bloğu içinde kullanılamaz).

Daha karmaşık, mantıkla yeniden kullanılabilir bileşenler (taban erişim gerektiren bir alışveriş aracı özeti gibi), dikkate değer:0)View Bileşenler). View components, kendi Invoke/InvokeAsync yöntemi ile tam olarak sınıflanmış sınıflardır, servis ve karmaşık işlemeye modern bir hale gelir:

public class CartSummaryViewComponent : ViewComponent
{
 public async Task<IViewComponentResult> InvokeAsync()
 {
 var cart = await GetCartAsync();
 return View(cart);
 }
}

Ayrıntılı bilgi için: Invoke from a view withurFLT:57).

Bölümler ve RenderSection

Bölümler, bireysel görüşlerin doldurabileceği bir düzende bölgeleri tanımlamanıza izin verir. Ortak kullanım koşulları, sayfaya özgü senaryolar, stil tabloları veya kenar çubuğu içeriği içerir.

@section Scripts {
 <script src="~/Scripts/page-specific.js"></script>
}

Bir bölüm gerekli olarak işaretlenirse ([[Dön:60)), düzeni kullanan her görüş onu tanımlamak zorundadır veya bir istisna atılacaktır. sayfaya temel olan öğeler için gerekli bölümler, bir başlık alanı veya ana içerik gibi.

Ayrıca, bir bölüm, arsadaki [[Dönetici:61) kullanılarak tanımlanırsa, varsayılan içeriği sağlamanızı sağlar.

HTML Helpers vs Tag Yardımlayıcıları

Razor görüşleri HTML oluşturmak için iki sunucunun yanı sıra araçları sunar: HTML yardımcıları ve Tag Yardımcılar.

  • [FONT:0)HTML Yardımcıları [DÜDÜT:1], görünüşe göre çağrılıştırılıyor, örneğin:62| veya ) HTML dizelerini geri getiriyorlar ve MVC'nin önceki versiyonlarıyla çalışan geliştiricilere aşinalar.
  • [FONT=0)Etik Yardımcılar[Döneticiler[Döneticileri) ASP.NET Core'da tanıtıldı, ancak ayrıca NuGet paketi aracılığıyla 5x'te () sunucu süreçlerinin, e.g., [[FONT:65. Tag Yardımseverler daha doğaldır ve zengin Intellisense ve geçerli entegrasyon sağlarlar.

Örneğin, Tag Yardımcılar ile bir form oluşturmak gibi görünüyor:

<form asp-action="Submit" asp-controller="Home" method="post">
 <label asp-for="Email"></label>
 <input asp-for="Email" />
 <span asp-validation-for="Email"></span>
 <button type="submit">Submit</button>
</form>

Tag Yardımçılar otomatik olarak model özellikleri, doğrulama özelliklerine bağlanır ve doğru URL'ler üretirler çünkü tamamen yeni bir gelişme için tercih edilirler, çünkü sorunsuz bir şekilde uygulanabilir ve korumak daha kolaydır.

Geçerlilik ve Hata

Razor görüşleri ASP.NET MVC'deki geçerlilik sistemi ile konserde çalışır. HTML Helpers veya Tag Yardımlayıcıları kullanarak modelleme ve mülkiyet seviyesindeki doğrulama hataları gösterebilirsiniz.TheİLFLT:67).

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.ValidationMessageFor(m => m.Email, "", new { @class = "text-danger" })

Tag yardımcılarını kullandığınızda, geçerlilik süresi otomatik olarak eklenir ve model bağlayıcısı sırasında gerçekleşir.Bu müşteri tarafı doğrulama işareti, modelinizde veri annotasyonları kullanılarak oluşturulur, örneğin:UVT:71).

Belirsiz müşteri odaklı bir doğrulamayı sağlamak için gerekli JavaScript kütüphanelerinin ([Dön:73) ve [[BİLM:74) genellikle sizin düzeninize dahil edilir, genellikle [[ŞUYGÜ:75).

Razor with AJAX and Partial Rendering

Razor görüşleri tam sayfa yükleri ile sınırlı değildir. AJAX ile geri döndü ve DOM'ye eklenmiş olan kısmi bir görüntü oluşturabilirsiniz:

public ActionResult ProductDetails(int id)
{
 var product = db.Products.Find(id);
 if (product == null) return HttpNotFound();
 return PartialView("_ProductDetails", product);
}

Müşteri tarafında, jQuery veya yerleşik-inETHFLT:77) bir konteynere kısmi sonucu yükleyecek yardımcı:

@Ajax.ActionLink("View Details", "ProductDetails", new { id = item.Id },
 new AjaxOptions { UpdateTargetId = "detailsContainer" })

AJAX için Razor kısmilarının kullanılmasının, tam sayfa ve kısmi cevaplar arasındaki çoğaltmadan kaçınması gerekir.Sessizin bu şekilde, AJAX için kullanılan Razor kısmilarının faydasını içeren bir çağrıda bulunmalısınız.

Razor Views için Performansı

Razor görüşleri derlenmiş olsa da, kaçınmak için hala performans tuzakları var:

  • [FONT:0] Aşırı mantıktan şüphe yok.[[Dönemli:0))Düşünceleri mümkün olduğunca basit tutun; karmaşık hesaplamalar, veri dönüşümleri ve kontrol katmanına iş kuralları, hizmet katmanına veya görüntü modeline hareket edin.
  • [FONT:0)Zizinlikle ilgili olarak (Dönderlik) veya değiştirilebilir (örneğin, statik navigasyon) gibi bir şekilde yapılan incelemeler için, kontrol işlemine uygun olarak, kullanılan kısmi görüşler için, [[DüzD:83|t=f=f=f=d=f=f=d=d=d=d=d=3|s.
  • [[DÜŞÜNÜ:0) Sayfa başına verilen kısmi görüş sayısını dikkate almak.[[DÜT:1) HerurFLT:86) çağrı ek olarak ekler.Bir kısmi bir şekilde bir StringBuilder veya özel bir HTML jeneratörü kullanarak kontrol cihazında HTML'yi yapılandırırsa.
  • [FONT:0) I/O-bound operasyonlar için bir alternatif eylem kullanın.[[Dönümüzdekiler veritabanı sorguları veya dış API çağrılarını içeren verilere bağlıdır, kontrol işlemini [[ENFLT:87) olarak tanımlar ve modeli geçmeden önce.
  • [FONT:0)Öyle Razor görüşlerine göre [Döntgen:89) veya ASP.NET MVC 5 (viaEND:91) tarafından belirlenen ilk soru derleme gecikmesini ortadan kaldırır.

En İyi Uygulamaların Hazırlanabilir Razor Görüntüleme

  • [FONT:0)Ayrıca, güçlü tip modeller ve Ana veriler için ViewBag'ı kullanmaktan kaçınır. Bu, der-zaman kontrolü ve okunabilirliği artırır.
  • [FONT:0) Kongreleri adlandırmayı Takip Et:[Dönler:[Dönler:[Dönler:)[Dönler:[Dönler:)[Dönler:[Dönler:)))
  • [FONT:0]Use display and editör şablonlar), yeniden kullanılabilir veri türü ekranları için. Örneğin, [[Dönem:93) format tarihleri sürekli olarak.
  • [FONT=0)Separate CSS ve JavaScript[Dönlerden pdf) görüntülerden sadece en az satır stili koyun; dış kaynaklar için bundling ve minification kullanın.
  • [FONT:0) Kontrolcüler ve görüntü modelleri için birim testleri yaz.) Görüşleri kendilerini test etmek zor olsa da, verilere doğru geçtiğinden emin olun.Relamento veya Playwright gibi UI test çerçevelerini düşünün.
  • [[Döneticileri:0)Yerel tasarımlara odaklanmıyor.[[Dönetici:0) Yerel yönetimler, ancak HTML'yi sorgulayarak ve [[FONTFLT:94) ve bölümlere çağrılar içermemelidir.

Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç

Razor görüşleri ASP.NET MVC'de dinamik HTML nesli arka kemiğidir. Temiz sözcüleri, C# ile sorunsuz entegrasyon ve güçlü tipleme, düzenler, kısmilar ve geçerlilik onları inşa etmek için güçlü bir araç haline getirir - her bir şekilde gelişmiş özelliklerle birlikte gelişmiş, görünüm bileşenleri ve AJAX'lar, performans veya kod kalitesini ödün vermeden zengin kullanıcı deneyimlerinizi oluşturabilirsiniz. ASP.NET ile gelişmeye devam ettikçe, Razor view motor yeteneklerini keşfetmeye devam edin - her bir web geliştirme çerçevesi ile birlikte gelişmiştir.

Daha fazla okuma için, resmi Microsoft belgelerine ASP.NET Core)Razor Syntax) ile birlikte bakınız).Partial Views) ve ESFLT:4'de Emek Yardımseverler ()