Merhaba arkadaşlar bu hafta ASP.NET MVC'nin Controller katmanından bahsedeceğim ve ilk projemizi oluşturacağız.
İlk MVC Projesi
Önceki haftalarda ASP.NET MVC Framework ile teoride tanışmıştık. Bu hafta ilk projemizi oluşturarak pratikte de giriş yapmış olacağız.
ASP.NET MVC projesi oluşturmak için önce File menüsünden New > Project seçimini yapıyoruz.
Karşımıza çıkan pencerenin sol tarafından Visual C# ve onun altındaki Web seçeneğini seçiyoruz. Daha sonra ASP.NET MVC 4 Web Application seçeneğini seçiyoruz. Projemize bir isim verdikten sonra OK düğmesine basıyoruz.
Daha sonra karşımıza Project Template ekranı çıkıyor. Burada şablon olarak Empty'yi seçiyoruz ve View engine'i Razor olarak bırakıyoruz. Daha sonra View engine'lere ayrıca değineceğim.
OK düğmesine bastıktan sonra projemizin oluşturulması için biraz bekliyoruz. Projemiz oluştuktan sonra Solution Explorer'da aşağıdaki gibi bir proje elde etmiş olmamız gerekiyor:
Projemizi Ctrl+F5 ile çalıştırdığımızda aşağıdaki 404 hatasını alırız. İstemci tarafından gönderilen istek MVC'de Controller'lar tarafından yakalanır. Henüz bir Controller nesnemiz olmadığından dolayı, gelen istek yakalanıp işleme konulamadı ve bu hatayı aldık:
Controller
MVC uygulamalarında bir web tarayıcısından istek yapıldığı zaman, bir Controller o isteğe cevap vermekle sorumludur. Controller bir veya birden fazla Action'a sahip olabilir ve farklı türde Action Result'lar döndürebilir. Mesela bir Controller Action'ı bir View veya dosya döndürebilir ya da tarayıcıyı başka bir Controller Action'ına yönlendirebilir.
Bütün Controller'lar için temel sınıf ControllerBase sınıfıdır. Controller sınıfı ControllerBase sınıfından türeyen bir sınıftır ve bir Controller'ın varsayılan implementasyonudur. Controller sınıfı şu aşamalardan sorumludur:
- Uygun Action metodunu bulmak ve çağrılabilirliğini kontrol etmek.
- Action metotlarında parametre olarak kullanılacak değerleri almak.
- Action metotların çalışması sırasında meydana gelebilecek bütün hataları kontrol etmek.
- ASP.NET View'larını oluşturmak için varsayılan WebFormViewEngine sınıfını sağlamak.
Visual Studio'da bir Controller sınıfı oluşturmak için Controller klasörüne sağ tıklıyoruz ve Add > Controller seçimi yapıyoruz.
Gelen pencerede isim olarak HomeController ismini veriyoruz. HomeController ASP.NET Web Formları'ndaki Default.aspx gibi varsayılan olarak atanmıştır. Template olarak da Empty MVC Controller seçimini yaptıktan sonra Add düğmesine basıyoruz. Yeni bir Controller eklenirken dikkat edilmesi gereken bir nokta her Controller sınıfının adının "Controller" eki ile sonlandırılmasıdır.
Aşağıdaki gibi bir sınıf elde etmiş oluyoruz:
namespace MerhabaMVC.Controllers { public class HomeController : Controller { // // GET: /Home/ public ActionResult Index() { return View(); } } }
Burada bir ActionResult döndüren Index metodu, HomeController'ına ait bir Action'dır. Bu Action'ı bir string döndürecek şekilde aşağıdaki gibi değiştirebiliriz:
namespace MerhabaMVC.Controllers { public class HomeController : Controller { // // GET: /Home/ public string Index() { return "<h1>Merhaba Dünya</h1>"; } } }
Daha sonra Ctrl+F5 ile projemizi çalıştırdığımızda aşağıdaki gibi bir sayfa elde etmiş oluruz:
Görüldüğü gibi HomeController varsayılan Controller olduğu için ve onun Index metodu da onun varsayılan Action'ı olduğu için tarayıcının adres çubuğuna "http://localhost:4266/" girince bu Action'a yönlendirildik. Bu Action adres çubuğuna "http://localhost:4266/Home/Index" girilerek de tetiklenebilirdi.
Bir Controller sınıfının içindeki bütün metotlar birer Action'dır. Yeni bir Action eklemek için Controller sınıfının içine yeni bir metot eklemek yeterlidir.
namespace MerhabaMVC.Controllers { public class HomeController : Controller { // // GET: /Home/ public string Index() { return "<h1>Merhaba Dünya</h1>"; } public string Hello() { return "<span style=\"color: red; font-size: 32px;\">Hello!</span>"; } } }
Yukarıda eklenen Hello metodu HomeController'a ait bir Action'dır. "http://localhost:4266/Home/Hello" adresinden bu Action tetiklenebilir. Yani görüldüğü gibi varsayılan kural şu şekildedir: {controller}/{action}/{id}. Burada id parametresi Action metodunun parametresidir. Bu kural tabii ki değiştirilebilir, bu konuya ilerleyen haftalarda değineceğim.
Controller sınıfına eklenen metodun Action metot olması istenmiyorsa aşağıdaki gibi metodun başına [NonAction] eklenmelidir:
[NonAction] private void DoSomething() { // Do Something }
Action Metodu Parametreleri
Hello metodunu aşağıdaki gibi değiştirirsek bu Action'ı "http://localhost:4266/Home/Hello?name=Ahmet" şeklinde çağırabiliriz. Metoda yeni bir parametre eklediğimizde, adres çubuğuna yazılan parametrenin değeri eşleşen metot parametresinin değeri olarak atanmış olur.
public string Hello(string name) { return "<span style=\"color: red; font-size: 32px;\">Hello " + name + "!</span>"; }
Eğer metot parametresinin adı id ise "http://localhost:4266/Home/Hello/2" şeklinde çağrılabilir. Bu örnekte 2 sayısı otomatik olarak id parametresinin değeri olarak atanır.
Eğer yukarıda elde ettiğimiz tarayıcı çıktılarının kaynak kodlarına bakarsanız sadece döndürdüğümüz string değerini görürsünüz. Başka hiçbir HTML öğesi içermez. Bunun sebebi yukarıdaki Action metotlarının geriye saf string verisi göndermesi ve bunu herhangi bir View aracılığı olmadan yapmasıdır. MVC mimarisinde görüntü oluşturma görevi View'a aittir ve View görüntüyü bize HTML çıktısı olarak verir fakat bizim View nesnemiz olmadığı için böyle bir çıktı elde ettik.
Önümüzdeki hafta View'lar ve Razor Engine'den bahsedeceğim. Bu yazıda Action metotlarından string değerleri döndürdük. Haftaya ActionResult döndüren metotlarla, Controller'ların View'lar ile nasıl ilişkilendirileceğini anlatacağım. Haftaya görüşmek üzere hoşça kalın.
Kaynaklar:
0 yorum :