MVC Framework - Görünümler
İlk giriş bölümlerinde görüldüğü gibi, View, uygulamanın Kullanıcı Arayüzüyle ilgili bileşendir. Bu Görünümler genellikle model verilerinden bağlanır ve html, aspx, cshtml, vbhtml gibi uzantılara sahiptir. İlk MVC Uygulamamızda, verileri son kullanıcıya göstermek için Denetleyicili Görünümler'i kullandık. Bu statik ve dinamik içeriği tarayıcıya işlemek için, MVC Framework View Engines kullanır. Görünüm Motorları temelde, tarayıcıya son HTML'yi işlemekle sorumlu olan işaretleme sözdizimi uygulamasıdır.
MVC Framework, iki yerleşik görünüm motoruyla birlikte gelir -
Razor Engine- Razor, sunucu tarafı C # veya VB kodunu web sayfalarında etkinleştiren bir işaretleme sözdizimidir. Bu sunucu tarafı kodu, web sayfası yüklenirken dinamik içerik oluşturmak için kullanılabilir. Razor, ASPX motoruyla karşılaştırıldığında gelişmiş bir motordur ve MVC'nin sonraki sürümlerinde başlatılmıştır.
ASPX Engine- ASPX veya Web Forms motoru, başından beri MVC Çerçevesine dahil edilen varsayılan görünüm motorudur. Bu motorla kod yazmak, ASP.NET Web Formlarında kod yazmaya benzer.
Aşağıda hem Razor hem de ASPX motorunu karşılaştıran küçük kod parçacıkları verilmiştir.
Ustura
@Html.ActionLink("Create New", "UserAdd")
ASPX
<% Html.ActionLink("SignUp", "SignUp") %>
Bu ikisinden Razor, kompakt sözdizimi, test odaklı geliştirme yaklaşımları ve daha iyi güvenlik özellikleriyle birlikte gelen gelişmiş bir View Engine'dir. En çok kullanılan View motoru olduğu için tüm örneklerimizde Razor motorunu kullanacağız.
Bu Görünüm Motorları aşağıdaki iki türde kodlanabilir ve uygulanabilir:
- Kesinlikle yazılmış
- Dinamik tip
Bu yaklaşımlar, modellerin Görünüme güçlü veya dinamik bir şekilde bağlanacağı sırasıyla erken bağlanma ve geç bağlanmaya benzer.
Kesinlikle Yazılmış Görünümler
Bu kavramı anlamak için örnek bir MVC uygulaması oluşturalım (önceki bölümlerdeki adımları izleyin) ve adlı bir Controller sınıfı dosyası ekleyelim. ViewDemoController.
Şimdi, aşağıdaki kodu denetleyici dosyasında kopyalayın -
using System.Collections.Generic;
using System.Web.Mvc;
namespace ViewsInMVC.Controllers {
public class ViewDemoController : Controller {
public class Blog {
public string Name;
public string URL;
}
private readonly List topBlogs = new List {
new Blog { Name = "Joe Delage", URL = "http://tutorialspoint/joe/"},
new Blog {Name = "Mark Dsouza", URL = "http://tutorialspoint/mark"},
new Blog {Name = "Michael Shawn", URL = "http://tutorialspoint/michael"}
};
public ActionResult StonglyTypedIndex() {
return View(topBlogs);
}
public ActionResult IndexNotStonglyTyped() {
return View(topBlogs);
}
}
}
Yukarıdaki kodda, tanımlanmış iki eylem yöntemimiz var: StronglyTypedIndex ve IndexNotStonglyTyped. Şimdi bu eylem yöntemleri için Görünümler ekleyeceğiz.
StonglyTypedIndex eylem yöntemine sağ tıklayın ve Görünüm Ekle'ye tıklayın. Sonraki pencerede, 'Kesin yazılmış bir görünüm oluştur' onay kutusunu işaretleyin. Bu aynı zamanda Model Sınıfı ve İskele şablon seçeneklerini de etkinleştirecektir. İskele Şablonundan Liste seçeneğini seçin. Ekle'yi tıklayın.
Aşağıdaki ekran görüntüsüne benzer bir Görünüm dosyası oluşturulacaktır. Dikkat edebileceğiniz gibi, en üste ViewDemoController'ın Blog modeli sınıfını dahil etti. Bu yaklaşımla kodunuzda IntelliSense'i de kullanabileceksiniz.
Dinamik Yazılı Görünümler
Dinamik tipli görünümler oluşturmak için IndexNotStonglyTyped eylemine sağ tıklayın ve Görünüm Ekle'ye tıklayın.
Bu sefer 'Kesin yazılmış bir görünüm oluştur' onay kutusunu seçmeyin.
Ortaya çıkan görünüm aşağıdaki koda sahip olacaktır -
@model dynamic
@{
ViewBag.Title = "IndexNotStonglyTyped";
}
<h2>Index Not Stongly Typed</h2>
<p>
<ul>
@foreach (var blog in Model) {
<li>
<a href = "@blog.URL">@blog.Name</a>
</li>
}
</ul>
</p>
Yukarıdaki kodda da görebileceğiniz gibi, bu kez önceki durumda olduğu gibi Blog modelini View'e eklemedi. Ayrıca, bu sefer IntelliSense'i kullanamazsınız çünkü bu sefer bağlama çalışma zamanında yapılacaktır.
Verilerin çalışma zamanında bağlandığı ve bağlantılı modelde bir şey değişirse çalışma zamanı hatalarına yol açabilecek dinamik tipli Görünümlerin aksine Model olarak hangi verilerin aktarıldığını zaten bildiğimizden, güçlü biçimde yazılmış Görünümler daha iyi bir yaklaşım olarak kabul edilir.