Durum

Controllers

Controller, MVC mimari katmanının önemli bir parçasıdır. Kısaca GET ve POST işlemlerini yerine getirir diyebiliriz. Önce eğer herhangi bir model ile ilgili işlem yapılacaksa, ilgili modelin propertylerini set edip, model ile işleyip viewa gönderir, kullanıcıdan modelde yaptıkları değişiklikleri POST ederek tekrar controllera gönderir. Post edildiğini de ilgili controllerımızın üzerinde [HttpPost] attribute ile anlarız. Ya da model ile ilgili bir işlem yapmayacaksak veya form ile çalışmayacaksak viewa ViewBag, ViewData, TempData gibi bellekte yer ayırıp veri tutan bir propertydir. ViewBag, ViewData ve TempDatanın ne olduğunu daha sonra anlatacağım. Peki yeni bir controller oluşturmak için ne yapmamız gerekir :

Controller

Controller oluşturduktan sonra önümüze aşağıdaki gibi bir ekran gelecektir. Eğer hiç bir model ile controllerımızı ilişkilendirmeyip boş bir controller oluşturmak istersek template kısmından Empty Controller seçip, controllerımıza da isim verip controller oluşturma ekranımızı tamamlayabiliriz.

Controller1

Reklamlar

Bundling and Minification

Asp.net MVC 4’ün destek verdiği aynı bundling and minification frameworku ASP.Net MVC 4.5 te içermektedir. Peki ne işe yarar bundling and minification?

Bundlelar

Bu sistem içine birkaç script referansı ekleyip birleştirerek sayfanıza gelen requestları yani istekleri azaltır ve tek bir request haline getirir. Bu da sitenizin yüklenme zamanındaki performans kaybını azaltır. Peki bundle ayarlarını nerde yaparız? Asp.net MVC projemizdeki /App_Start/BundleConfig.cs dosyamızda, projemizdeki Layout view içinde hangi still veya hangi script dosyalarının referans edildiğini görebiliriz. veya kendimiz de referans etmek istediğimiz dosyaları ekleyebiliriz. Örnek olarak MVC Internet Application templatei default olarak versiyon numarası bağlanmamış bir jquery bundle dosyası bulundurur :

bundles.Add(new ScriptBundle(“~/bundles/jquery”).Include(
“~/Scripts/jquery-{version}.js”));

Referans olarak eklediğimiz bundleları sitemizde çağırmak için hangi URL’yi layoutta (_Layout.cshtml) çağırmamız gerekiyor sorusunun cevabı ise :

@Scripts.Render(“~/bundles/jquery”)

Minifacation : 

Gereksiz boşlukların, koddaki satır sonu ve yorum satırlarının kaldırılması yükleme sürelerinin iyileştirilmesi için bir süreçtir. Yani still ve script dosyalarımızı optimize edip istemciye giden dosya boyutunun küçülmesini ve request sayısının azalmasını sağlar.

Asp.net MVC 4 Proje Oluşturma

ASP.NET MVC 4 ü daha iyi anlayabilmek için örnek bir proje oluşturup, onun üzerinde inceleme yapabiliriz.

ASP.NET MVC 4 İçin Yazılım Gereksinimleri

  • Windows XP
  • Windows Vista
  • Windows 7
  • Windows 8
  • Windows Server 2003
  • Windows Server 2008
  • Windows Server 2008 R2
MVC 4 geliştirme araçları Visual Studio 2012 de hazır gelmektedir. Visual Studio 2010 SP1/Visual Web Developer 2010 Express SP1 ortamlarına da yüklenebilir.
ASP.NET MVC 4 Uygulaması Oluşturma

  1. File > New Project
    2.  ASP.NET MVC 4 Webb Application ı seçiyoruz.
    3. Uygulama ismini girip OK seçin.
Uygulama Şablonları
 
Yeni proje oluşturup OK a bastığımızda karşımıza aşağıdaki gibi bir pencere gelecek. Bu pencereden hazır proje şablonu seçebiliriz.
Buradaki şablonların kısaca tanımı;
  • The Internet Application Template: Bu şablonda gerekli olan scriptler, css ler, üyelik için gerekli sınıflar ve fonksiyonlar, kısacası hazır çalışan bir web uygulaması şeklinde bir şablon gelir.
  • The Intranet Application Template: Internet Application Template ile aynıdır, tek farkı ASP.NET Membership üyelik sistemi yerine Windows Kullanıcı Hesaplarını kullanır.
  • The Basic Template: Css ve scriptler vardır. Model ve controller klasörleri boş olarak gelir.
  • The Empty Template: Boş bir proje gelir. Sadece App_Start klasöründe routing ve filter ayarları yapılmıştır.
  • The Mobile Application Template: Internet Application Template gibi çalışan bir uygulama olarak gelir. Scriptler ve css ler tamamen mobil tarayıcılar için uygun olarak gelir.
  • The Web API Template: Yine çalışabilir bir hazır bir şablondur. Üyelik yönetimi yoktur. HTTP servis için gerekli ayarlar yapılmıştır.
Görüntüleme Motorları (View Engines)
 
Şablon seçiminin altında sözdizimini kullanacağımız görüntüleme aracınıda seçebiliriz. Derslerimiz boyunca Razor ile örneklerimizi yapacağız.
 
Test
 
Bütün şablonlar için test projesi seçilebilir durumdadır.
Eğer test projeside eklemek istiyorsak, Create a unit test project seçeneğiniz işaretliyoruz. Seçimden sonra iki seçenek daha gelir.
  1. Test project name: Test projesinin ismini belirlediğimiz alan.
  2. Test framework: Test altyapısını seçtiğimiz alan. Yüklü olan altyapılar görünür varsayılan olarak Visual Studio Unit Test yüklü olarak gelir. Farklı (like xUnit, NUnit, MbUnit, … vb) altyapılarda yükleyebiliriz.

ASP.net MVC NEDİR?

“ASP.NET HTML, CSS, JavaScript ve sunucu taraflı programlama ile web sayfaları ve web siteleri yapmaya yarayan bir geliştirme yapısıdır.
ASP.NET 3 farklı geliştirme modeli sunar: Web pages, MVC (Model View Controller) ve Web Forms.”

“w3school”


MVC, uygulamanın kullanıcı arayüzünü 3 temel yapıya ayırır:

Model: Verinin nasıl değişeceğini ve nasıl yönetileceğini belirleyen iş kurallarını (Business Rules) içeren sınıfların tamamının bulunduğu katmandır. Genelde bunlar veritabanını temsil eden sınıflarlar veya domaini temsil eden nesnelerdir. EntityFramework, NHibernate gibi, entity-data-model ler de, model katmanında yer alabilir. Yani uygulamamızda kullanacağımız nesneler bu katmandadır.

View: Kullanıcı arabiriminin (User Interface – UI) gösterileceği katman. Dinamik olarak üretilen HTML şablonu bu katmandadır. Kısaca veri gösterim katmanı diyebiliriz.

Controller: Tüm sistem akışının, kullanıcı ile olan etkileşimi kontrol eden ve olayları yöneten sınıfların tamamı. View ve Model katmanları arasındaki ilişkiyi yönetir. Kullanıcıdan girdi alır, modelle iletişime geçer ve ne gösterileceğine karar verir.

ASP.NET MVC 1

13 MART 2009 da resmi olarak kodlar ve birim testlerle MVC mimarisi yayınlanmıştır. MVC mimarisinin bugün kullanılan bir çok özelliği aslında MVC 2 de gelecektir.

ASP.NET MVC 2

MVC 2 ilkinden 1 yıl sonra yayınlanmıştır (MART 2010). MVC 2 de olan bazı ana özellikler şunlardır:

  • Otomatik olarak oluşturulan kullanıcı arabirimi yardımcıları (UI Helpers) ve özelleştirilebilir şablonlar.
  • Hem server, hem de istemci taraflı, nitelik tabanlı (attribute-based) bir model doğrulama (model-validation) yapısı.
  • Strongly typed HTML Helpers
  • Geliştirilen Visual Studio araçları.


ASP.NET MVC 3

MVC 3, MVC 2 den 10 ay sonra yayınlanmıştır. Eklenen ana başlıklar:

  • Razor görüntüleme motoru (Razor View Engine).
  • .NET 4 dataannotation desteği.
  • Gelişmiş model doğrulama (model validation).
  • Unobtrusive JavaScript, jQuery Validation, ve JSON için daha iyi bir JavaScript desteği.
  • Yazılım ve platforma bağlı güncellemeler ve yönetim için NuGet kullanımı.

Razor View Engine

MVC 1 den itibaren bugüne kadar yapılan en büyük HTML görüntüleme güncellemesi Razor olmuştur. MVC 1 ve MVC 2 de genel olarak kullanılan görüntüleme motoru Web Forms görüntüleme motoru ile aynı sözdizimini ve dosya uzantısındadır. (ASPX/ASCX/MASTER)

Örnek Web Forms sözdizimi:

 
<%@ Page Language="C#" MasterPageFile="</Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcMusicStore.ViewModels.StoreBrowseViewModel>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Browse Albums
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <div class="genre">
        <h3><em><%: Model.Genre.Name %></em> Albums</h3>
        <ul id="album-list">
            <% foreach (var album in Model.Albums) { %>
                <li>
                    <a href="<%: Url.Action("Details", new { id = album.AlbumId }) %>">
                    <img alt="<%: album.Title %>" src="<%: album.AlbumArtUrl %>" />
                    <span><%: album.Title %></span>
                    </a>
                </li>
            <% } %>
        </ul>
    </div>
</asp:Content>

Razorun söz dizimi tamamen kod odaklı bir şablonu vardır. İlk bakıldığı anda HTML ve .Net kodları hemen anlaşılır, okunması ve anlaşılması çok kolaydır. Yukarıdaki kodun Razor ile yazılmış hali aşağıdaki gibidir:

@model MvcMusicStore.Models.Genre
@{ ViewBag.Title = "Browse Albums"; }
<div class="genre">
    <h3><em>@Model.Name</em> Albums</h3>
    <ul id="album-list">
        @foreach (var album in Model.Albums)
        {
            <li>
                <a href="@Url.Action("Details", new { id = album.AlbumId })">
                    <img alt="@album.Title" src="@album.AlbumArtUrl" />
                    <span>@album.Title</span>
                </a>
            </li>
        }
    </ul>
</div>