asp.net/mvc/download
adresinden mvc framework kurulumunu indirip kurduktan sonra, VS 2008'de
new project seçeneğini seçtiğiniz de ASP.NET MVC Application
seçeneğinin belirdiğini göreceksiniz.
File>New Project
seçeneklerinden ASP.NET MVC Application seçip yeni bir asp.net mvc
framework projesi oluşturalım ve proje template ile beraber gelen yeni
dosyaların neler olduğuna bakalım.
Yukarıdaki
resim de ben de ASP.NET MVC 2 Application da gözükmektedir. Bu proje
türü daha önceki makalemde bahsettiğim ASP.NET MVC 2 Preview 1 sürümü
ile gelen proje türüdür. Proje tipi adında ki versiyon numarası
sayesinde iki proje tipi de aynı bilgisayarda çalışabilmektedir.

Content
klasörü özel bir klasör değildir template projesi içersiinde yer alan
.css dosyasını koymak için tercih edilmiş bir klasördür. Sizde kendi
.css vb. dosyalarınız için kullanabilirsiniz ya da silebilirsiniz.
Scripts
klasörü özel bir klasör olmamak ile beraber içerisinde Microsoft'un
ajax javascript kütüphaneleri ve artık resmi olarak da Microsoft'un
desteklediği ve kullandığı jQuery kütüphaneleri yer almaktadır. -vsdoc
ifadesini içeren .js dosyaları production da çalışmak için değil Visual
Studio'da javascript kodlarını yazarken jQuery için intellisense
sağlamak için Visual Studio tarafından kullanılmaktadır. (daha önceki
blog yazılarımdan birisinde bundan bahsetmiştim)
Controllers
klasörü her bir controller sınıfı burada oluşturulur ve oluşturulmuş
routing table sayesinde asp.net uygulamanıza http ile ulaşan istekler
ilk olarak buradaki sınıflardan uygun olanı bulur ve reflection ile bir
instance oluşturur ve controller sınfı içerisinde istek yapılmış olan
method invoke eder(çağrırır). Bu method kendi içerisinde işleri
yaptıktan sonra bir "ActionResult" dönerek view katmanına geçer ve
kullanıcı arayüzünün oluşturulmasını bu şekilde sağlar.
Views
klasörü ASP.NET MVC Framework default viewengine tarafından view
dosyaları olarak kullanılan .aspx, .ascx dosyalarını aramak için
kullanılan klasördür. Bu klasör içinde Shared adında yer alan klasör
tüm controllerlar tarafından kullanılan ortak view dosyalarını
içermektedir. Views klasörünün içerisine her controller için bir klasör
açılmalı ve her .aspx sunan her controller action method için bir view
(istisnalardan ayrıca bahsederiz.) dosyası oluşturulmalıdır.
Örneğin
yukarıda ki örnekte HomeController sınıfı içerisinde ki Index methodu
için istek yapıldığında Index.aspx içerisinde yer alan markup
görüntülenecektir.
Shared klasörü içerisinde Site.Master
adında bir master page oluşturulmuş durumdadır. Tüm ASP.NET MVC
projeleri ilk açıldığında burada gördüğünüz standart master page ile
açılır. İsterseniz bunu kendiniz değiştirebilirsiniz ya da hazır bir
şeylere ihtiyacınız var ise
asp.net/mvc/gallery adresinden çeşitli hazır templateler elde edebilirsiniz.
Hazır
olarak gelen projeyi çalıştırın inceleyin ve koyduğunuz breakpointler
ile hangi methodun hangi adrese istek yapıldığında çalıştırıldığını
gözlemleyin.
Yeni sayfa oluşturmak adına öncelikle şunu yapalım. Controller klasörü altına
PersonelController adında
yeni bir sınıf ekleyin, ama bunun için standart şekilde add new class
diyerek dosya ekleyebileceğiniz gibi ASP.NET MVC Project Template
sayesinde gelen Add Controller menu seçeneğini kullanarabilirsiniz.
Controllers
klasörüne sağ tıklayın açılan menüden Add>Controller seçeneğini
seçin. Açılan kutuya PersonelController yazın, alttaki checkbox'i
işaretlediğiniz de sizin için bazı hazır boş methodlar oluşturacaktır.
Bir Personel ekranında standart CRUD işlemlerini yapacaksanız bu
checkbox işaretlendiğinde oluşturulan methodların önceden eklenmesi
sizin hızınızı artıracaktır.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
namespace MvcApplication1.Controllers
{
public class PersonelController : Controller
{
//
// GET: /Personel/
public ActionResult Index()
{
return View();
}
}
}
Yukarıdaki
gibi bir PersonelController oluşturuldu şimdi başka hiç bir şey
yapmadan uygulamayı çalıştırın ve <localadresiniz>/Personel/Index
şeklinde çalıştırın.
ASP.NET'in şu ünlü sarı hata ekranı geldi. Ve hata mesaı aşağıdaki gibi;
The view 'Index' or its master could not be found. The following locations were searched:
~/Views/Personel/Index.aspx
~/Views/Personel/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
Description: An
unhandled exception occurred during the execution of the current web
request. Please review the stack trace for more information about the
error and where it originated in the code.
Exception Details: System.InvalidOperationException: The view 'Index' or its master could not be found. The following locations were searched:
~/Views/Personel/Index.aspx
~/Views/Personel/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx |
Görüldüğü üzere MVC Framework biz action method içinden
return View();
şeklinde geri dönüş yaptığımız anda öncelikle Views/Personel klasörü
altında daha sonra ise Views/Share klasörü altında Index markup
dosyasını aramaktadır. Buradan da anlaşılacağı gibi ilgili klasöre
gidip markup dokumanımızı ekleyelim.
Views klasörü altına
Personel adında bir klasör ekleyelim ve Personel klasörüne sağ tıklayıp
Add>View menü seçeneğini seçelim.
Yukarıdaki
Add View penceresinden gözüktüğü gibi Index adında bir view
oluşturuyoruz. Bu şekilde eklendiğinde Index.aspx olarak eklenecek,
eklenen view'in partial view olması için yani .ascx dosyası olması için
ilk checkbox işaretlenmelidir. Strongly Typed view seçeneğini
işaretlediğiniz de aşağıda ki listelerde uygulama içinde ki Model
olarak kullanılabilecek sınıflar listelenir. Veritabanın da personel
adında bir tablonuz olması ve model tasarımınızda da bununla eşleşen
bir domain nesneniz (basit haliyle bir personel sınıfı) olması
durumunda bu seçeneği işaretleyebilirsiniz.
Eğer strongly-typed
view olarak eklerseniz aktive olan View Content listesinde ise
Create,Details,Edit,List ve Empty seçenekleri belirir. Empty dışındaki
bir değeri seçtiğiniz de duruma uygun html markup kodlarını içeren bir
.aspx sayfası oluşturulur. Input kontrollerini ekleyen basit bir
personel kaydı oluşturma formu gibi bir çıktı vermektedir. Ve işinizi
hızlandırabilir.
Yukarıda ki seçenekler ile bir view ekleyelim.
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Index
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Index</h2>
</asp:Content>
Yukarıda
ki markup kodları eklenen Index.aspx içeriğidir. Master page den gelen
iki adet Content kontrolü vardır. İçeriği oluşturacağımız Content iki
içerisine istediğinizi ekleyebilirsiniz. Content2 içerisini aşağıdaki
şekilde değiştirin.
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2><%=ViewData["PersonelAdSoyad"] %></h2>
Erişim<br />
<%=ViewData["PersonelTelefon"] %><br />
<%=ViewData["PersonelEPosta"] %><br />
</asp:Content>
Ve PersonelController içerisine geçip Index methodu aşağıdaki şekilde değiştirin.
public ActionResult Index()
{
ViewData["PersonelAdSoyad"] = "Cengiz Han";
ViewData["PersonelEPosta"] = "cengiz[@]cengizhan[.]com";
ViewData["PersonelTelefon"] = "05067750775";
return View();
}
Uygulamayı çalıştırın ve Persone/Index urlini çağırın.
Yukarıdaki
kod bloğunda kullanıcı isteği yaptığı anda PersonelController
sınıfından bir instance yaratılır ve Index methodu çağrılır. Burada
ViewData içerisine key'ler vererek bazı değerleri kaydettik. Bu yöntem
Controller'dan View katmanına veri geçmek için kullanılır. Ve
Index.aspx içerisinde ise bu ViewData bilgilerini okuduk ve ekrana
yazdırdık.
Sonraki makalelerimiz de MVC Routing, Strongly-Typed View, kullanıcı
girdilerini almak ve oluşturmak gibi konuları inceliyor olacağız.