Anasayfa RSS Email

ASP.NET MVC ilk proje ve proje yapısı

Yeni bir ASP.NET MVC projesi oluşturmak

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.

@ Sunday, August 16, 2009 5:51 PM | [ asp.net mvc makale ]

Comments

Gravatar

# re: ASP.NET MVC ilk proje ve proje yapısı

Posted by Tolga
on 8/25/2009 3:50 PM
merhaba hocam
ViewData[&quot;PersonelAdSoyad&quot;] = &quot;Cengiz Han&quot;;
ViewData[&quot;PersonelEPosta&quot;] = &quot;cengiz[@]cengizhan[.]com&quot;;
ViewData[&quot;PersonelTelefon&quot;] = &quot;05067750775&quot;;
gibi ayrı ayrı viewdatalarla uğraşmak yerine bi model yaratıp propertyleri doldurup
Viewi model ile d&#246;nd&#252;rmek daha g&#252;zel bir y&#246;ntem oluyor :)

Gravatar

# re: ASP.NET MVC ilk proje ve proje yapısı

Posted by Cengiz Han
on 8/25/2009 4:06 PM
Katılıyorum. Makelenin giriş seviyesinde olduğu i&#231;in &#231;ok da &#246;nemli değil aslında.
teşekk&#252;rler Tolga :)
Gravatar

# re: ASP.NET MVC ilk proje ve proje yapısı

Posted by Eralp
on 8/25/2009 6:21 PM
Allah askina CengizHan , microsoft sirf var demek i&#231;in mi harcadi bu cabayi ? Web forms yerini kolay kolay bırakmaz..IDEAL kavramı akademik anlamda her zaman desteklediğim ama ticari anlamda &quot;olması gerekirmi ?&quot; tartışmaya acik bir konu.

tşk.
Gravatar

# re: ASP.NET MVC ilk proje ve proje yapısı

Posted by Cengiz Han
on 8/25/2009 6:34 PM
EralpErat yorumunda ne demek istedim anladım? C&#252;mlelerinde ki tarza bakılırsa bir yerlerde s&#246;ylediğim bir şeye muhalefet ediyorsun ancak anlamadım.
Gravatar

# re: ASP.NET MVC ilk proje ve proje yapısı

Posted by Tolga
on 8/26/2009 11:58 AM
Eralp web forms yıllarca kullanmış biri olarak mvc ye gecince nekadar g&#252;zel şeyler yapabildiğimi g&#246;rd&#252;m kesinlikle ticari anlamda olması gerekir.postback ve viewstate kavramının artık var olmaması bile mvc ye ge&#231;mek i&#231;in yeterli bi nedendir.
Ve neden ben sayfamdaki kotrollerin isimlerini bileyimki niye dokumda button1_click i&#231;ine kod yazayım ve sırf buy&#252;zden test edilebirliğim d&#252;şs&#252;n
neden UI la ilgili bir kontrol&#252;n &#246;rneğin .visible =false işlemini .cs te yapayımki bu UI işidir UI kendi yapsın.niye bu sa&#231;ma sanap kodlar y&#252;z&#252;nden bi .cs dosya 2000-3000 satır kod olsun neden gridin databound işlemleri i&#231;in onlarca satır kod yazayım
Artık proje bitince ekranları a&#231;ıp test etmiyom projeyi yazarkende Unit testlerimi yazıyorum misler gibi &#231;alışıyor ben memnun m&#252;şteri memnun patron memnun
Alışma s&#252;reci biraz problemli oda beta s&#252;r&#252;mlerle ilgili makale &#231;okluğundan doğru bilgiyi bulamıyon ama buda kısa bi s&#252;relik zaten yakında o makaleler de temizlenecek ve doğru olanların sayısı artmış olacak

Post Comment

Title *
Name *
Email
Url
Comment *  
Please add 8 and 5 and type the answer here:
Web Statistics