Başlangıç

Asp.Net MVC 3’te ViewBag Kavramı -4

1 Yorum


ViewBag, MVC’de Dynamic View Data oluşturmayı sağlamaktadır. Dynamic View Data Dictionary, Runtime’da (çalışma anında) işleyen ve Controller ile View arasında veri transferini sağlayan yapıdır. Asp.Net’te aspx formumuza server side verileri, code behind’dan (aspx.cs) gönderiyorduk. MVC’de benzer işlemi ViewBag, ViewData vb. yapılarla aktarıyoruz. Öncelikle ViewBag Kullanımı;

HomeController’da Index() methoduna gidelim. ViewBag. yazalım ve çıkan açıklama metnini inceleyelim.

mvc6“This operation will be resolved at runtime” : Çalışma zamanında çözümlenecek olan kod bloğudur. Burada istediğimiz türden veriyi Index.aspx formumuza gönderebiliriz. Şimdi bir örnek ile nasıl yapıldığını inceleyelim.

public ActionResult Index()
{
    ViewBag.Message = “Hoşgeldiniz ASP.NET MVC!”;
 
    List<string> yazarlar = new List<string>
    {
        “Hasan KAÇAN”,
        “Ali UÇAN”,
        “Veli BİLEN”,
        “Halis GÖREN”,
        “Kemal ÖRTEN”
    };
    ViewBag.YazarListesi = yazarlar;
 
    return View();
}

List<string> türünden yazar listemizi oluşturup bu listeyi sayfada gösterelim. Bunun için bu değişkenimizi ViewBag ile Index.aspx’e gönderiyoruz.
ViewBag’a YazarListesi özelliği oluşturuyoruz ve yazarlar listemizi bu değişkene atıyoruz. Şimdi Index.aspx sayfamıza gidelim ve YazarListesi’nin değerlerini alt alta ekranda yazalım.
<%@ Page Language=”C#” MasterPageFile=”~/Views/Shared/Site.Master” Inherits=”System.Web.Mvc.ViewPage” %>
 
<asp:Content ID=”Content1″ ContentPlaceHolderID=”TitleContent” runat=”server”>
    Anasayfa
</asp:Content>
 
<asp:Content ID=”Content2″ ContentPlaceHolderID=”MainContent” runat=”server”>
    <h2><%: ViewBag.Message %></h2>
    <p>
        <% List<string> yazarlar = ViewBag.YazarListesi;
           foreach (var yazar in yazarlar)
           { %>
       
            <%:yazar %><br />
       
        <%}%>
    </p>
</asp:Content>
Kaynak:
Razor ile kullanımı:
mvc_1
mvc_3
Burada kırmızı çerçeveli alanda Razor seçin.
HomeController’da Index() methoduna gidelim. 
public ActionResult Index()
{
ViewBag.Message = “Hoşgeldiniz ASP.NET MVC!”;
var yazilimgelistir = new List<string> //bu şekildede liste oluşturulur yukarıdaki koddan farklı değil.
{
“Hasan KAÇAN”,”Ali UÇAN”,”Veli BİLEN”,”Halis GÖREN”,”Kemal ÖRTEN”
};
ViewBag.yazilimgelistir = yazilimgelistir;
return View();
}
mvc_4
index.aspx içine razor yapıda kodu yazıyoruz.
<h2>@ViewBag.Message</h2>
<ul>
@foreach (var gelistirici in ViewBag.yazilimgelistir)
{
<li>
@gelistirici
</li>
}
</ul>
Sonuç:
mvc7

Asp.Net MVC 3 Razor View Engine Kullanımı -3

1 Yorum


Razor da Aspx gibi bir görüntüleme motorudur (view-engine). MVC3 den sonra (MVC3 ve MVC4) gelmiştir.
Web forms ile geliştirdiğiniz bir projeye bazı özellikler eklemem gerekti diye sürekli <% %> etiketleri eklemekten bıktıysanız razor yeni bir bakış açısı getiriyor.
Razor un avantajları:

  • Düzenli, etkileyici ve akışkan: Sayfadaki karakter sayısını en aza indirir, okunurlugu yuksek, duzenli ve kolay bir akıs saglar.
  • Öğrenmesi kolay: .net ve html kodlarını birbiri içerisinde zorlanmadan kullanmayı sağlar. .net kodlarına başlamadan sadece @ işaretini koyarsınız ve Razor kodları rahatlıkla ayrıştırır.
  • Yeni bir dil değildir: Yeni bir dil değil , bilinen bir dilin (C#, VB, Html) daha iyi ve anlaşılır olarak yazılmasını sağlar.
  • Çok iyi deyim tamamlama desteği (intellisense): Herhangibir kod editoru veya bir araç kullanmadan rahatlıkla geliştirilebilir olmasına ragmen, visual studio, tam bir deyim tamamlama(intellisense) destegi sunar.
  • Birim Test: Conroller ve ya web server gerektirmeden, birim test edilebilir özelligi vardır.

Sayfa Düzeni (Layout) Yapacağımız projelerde sayfanın düzenini basit ve dinamik bir şekilde kontrol etmek  için;

  • Html.RenderPartial bu methodla Shared yada ilgili kontrolün altında belirttiğiniz sayfayı, sayfanıza çağırmaya olanak sağlar. Bir nevi include file gibidir.
  • @{Html.RenderPartial(“_menu”);} Şeklinde kullanıyoruz, bu kodu yazdığımız yere Shared klasörü içerisinde ki yada ilgili kontrol klasörü içindeki _menu.cshtml sayfası çağrılır. Çağırırken uzantıyı yazmamıza gerek yoktur, otomatik olarak aspx, ascx, cshtml ve vbhtml uzantılarında ilgili sayfayı bulur.
  • RenderPage Yukarıda ki kontrolün aynısı gibi çalışır, tek fark çağırırken tam yolu vermemiz gerekir. Bu sebepden dolayı çağıracığımız dosyanın bulunduğu klasörün bir önemi yoktur, istediğimiz dosyadan istediğimiz sayfayı çağırabiliriz.
  • @RenderPage(“~/Views/Home/_test.cshtml”) şeklinde kullanıyoruz.
  • Yukarıda ki iki yöntemde de data yı ilgili sayfalara gönderebiliyor ve o sayfalarda işlem yapabiliyoruz.
    1
    2
    @{Html.RenderPartial("_menu",Model);}
    @RenderPage("~/Views/Home/_test.cshtml",ViewBag.dinamik)
  • RenderSection bu yöntem ile sayfa içinde ki kod bloğunu farklı bir yerde göstermek için kullanıyoruz. Yukarıdaki yöntemlerin aksine dışarıdan değil içeriden çağırma işlemini yapıyoruz.
  • @RenderSection(“menu”, false) diyoruz, burada ki false gerekliliği ifade ediyor. Sonrasında görüntülenecek section bloğunu yazıyoruz. @section menu{<h1>menu</h1>}

Razor Sözdimi (Syntax)

  • Razor view engine kodlarının başına @ işareti koyuyoruz. Fakat bir mail adresini elle yazmak istediğimizde sıkıntı oluyor. Bunu ortadan kaldırmak için 2 tane @@ ile yazıyoruz. test@@test.com gibi..
  • Dinamik kodlarla html kodlarını iç içe yazdığımız bu yapıda nokta(.) simgesi başımızı ağırta biliyor. Yani @degisken.yazdığımızda ToString(), ToLower() gibi methodların listelendiğini görürüz halbu ki biz sadece nokta koymak istiyoruz. Bunun için@(degisken). şeklinde değişkeni parantez içine almamız yeterlidir.
  • Bir if bloğu yada herhangi bir kod bloğu içinde direk metin yada html kodu yazmamız gerekebilir. Bunun için razor bize 2 farklı yöntem sunuyor. İlk yöntemde tek satırlık yazımlar için @:tek satırlık yazım ve çok satırlı yazımlar için <text>çok satırlı yazım</text>
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    @if (true)
    {
        @:Tek satır yazım.
            <text>
            çok
            satırlı
            yazım
           </text>
    }

ViewBag kullanımı Mvc 3 ile birlikte gelen en önemli özelliklerden bir tanesi ViewBag nesnesi. Mvc 3 öncesinde ViewData[“degisken”] şeklinde view katmanımıza veri gönderiyorduk, eğer gönderdiğimiz veri bizim modelimizse view tarafında  ViewData[“degisken”] nesnesini ilgili modele dönüşümünü sağlıyorduk, yani 2 türlü iş yapıyorduk. ViewBag ile bu durum ortadan kalkıyor, ViewBag var gibi çalışıyor, neyi verirseniz o türe dönüşüyor ve ekstra bir işlem yapmadan kullanabiliyoruz.

01
02
03
04
05
06
07
08
09
10
11
12
//control katmanımız
public ViewResult Index()
{
    ViewBag.dinamik = context.uruns;
    return View();
}
//view katmanımız
@foreach (var item in ViewBag.dinamik)
{
    @item.ozellikAdi
}

Helper Kullanımı Yardımımıza hızlıca koşan helper ları yazmak ve kullanmak için çok güzel bir mekanızma bulunuyor. App_Code içine .cshtml uzantılı bir sayfa ekliyoruz ve içine razor syntaxlarını kullanarak fonksiyonumuzu yazıyoruz ve tüm sayfalardan bu fonksyionlara sayfaAdi.fonksiyon adı şeklinde erişip kullanabiliyoruz.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
  //App_Code klasörümüz içindeki myHelper.cshtml dosyamızın içi
 @helper stokDurumu(int stok){
     if (stok < 1)
     {
         @:Yok :(
     }
     else
     {
         var. @stok adet
     }
 }
//Herhangi bir sayfadan erişilip kullanılması
 @foreach (var item in Model) {
     @myHelper.stokDurumu(item.stok)
 }

Kaynak:

http://www.apostylee.com/razor-view-engine-puf-noktalari/ İlgili sayfada örnek var. İncelemek isteyenler için.
Örnek bir söz dizimi:

1
2
3
4
5
6
7
8
<div>
    @for(int i = 0; i < 10; i++)
    {
        <div class="class_@(i)">
            <span>sayı @(i)</span>
        </div>
    }
</div>

Yukarıdaki kodun html cıktısı:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<span style="font-family: Arial, Helvetica, sans-serif;"><div>
    <div class="class_0">
        <span>sayı 0</span>
    </div>
    <div class="class_1">
        <span>sayı 2</span>
    </div>
    ...
    ...
    ...
    <div class="class_9">
        <span>sayı 9</span>
    </div>
</div></span>

Aynı kodun Aspx deki soz dizimi

1
2
3
4
5
6
7
<span style="font-family: Arial, Helvetica, sans-serif;"><div>
    <% for(int i = 0; i < 10; i++) { %>
        <div class="class_<%: i %>">
            <span>sayı <%: i %></span>
        </div>
    <% } %>
</div></span>

Bir başka örnek;

Örnek Web Forms sözdizimi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<%@ 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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@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>

Kaynak:

http://alirizaadiyahsi.blogspot.com/2013/01/razor-aspx.html

Benim toparladıklarım bunlar ayrıca http://www.youtube.com/watch?v=Mh1ExbYkn-0 buradaki videoda güzel.

ASP.NET MVC NEDİR? -1

1 Yorum


Asp.net Bot yazımı ile yazılara baktım karşıma bu sorun çıktı. Önce Şöyle bloglardaki tanımları bir derleyelim. ASP.NET MVC w3school anlatımıyla şu demekmiş;

“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.”

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ı.

ASP.Net MVC Framework ‘ün ile getirdikleri yönünde bakacak olur isek; Controller kavramını kullanımı sayesinde, geliştirilen Web uygulamasının test kodu yazılması, daha kaliteli uygulama geliştirebilmesini sağlanmıştır. ASP.Net MVC ’nin getirdiklerini kullanıcı tarafından bakacak olur isek; temiz içerik ve anlamlı adres(Routing) üretimidir. Bu özellikler uygulama içerisinde sunulan ürün ya da bilgilerinin arama motorları(Bing,Google) daha kolay bulabilmesi, hazırlanan içeriğin hızlı cevap vermesini sağlamaktadır.

ASP.Net MVC Framework’ün uygulamalarımıza katığı bu özelliklerin yanında yeni sürümü ile de birçok kolaylık sunmaktadır. Bu yenilikler aşağıdaki gibi sıralama yapabiliriz.

  • Razor View Engine
  • Multi View Engine
  • Dependency Injection kullanım kolaylığı
  • Dynamic View ve ViewModel
  • Validation Impovemets
  • Session Yönetimi
  • Global Action Filters
  • JavaScript ve AJAX yenlikleri

Şimdi yenilikler hakkında kısa bilgilere verelim.

Razor View Engine

ASP.Net MVC 3, önceki sürümlerinde farklı olarak yeni bir View Engine yapısı ile gelmektedir. ASP.Net MVC ‘nin önce ki sürümlerinde Saprk View Engine ya da NHaml gibi View Engine yapıları ile View tasarımlarımız daha kolay bir şekilde gerçekleştir biliyorduk. Razor View Engine ile ASP.Net MVC 3 bütünleşik olarak geldiği için ve .Net 4 desteği ile ASP.Net MVC uygulamalarını daha kolay ve hızlı geliştirebiliyoruz.

Multi View Engine

ASP.Net MVC 3 yeniliklerinde bir olan Razor View Engine gibi ASP.Net MVC uygulamalarında View tasarlama işlemlerimizi kullanabileceğimiz birden fazla View Engine bulunmaktadır. Multi View Engine yeniliği sayesinde, uygulama projemize şablon dahil etme aşamasına farklı View Engine kullanmayı amaçlamaktadır.

Dependency Injection kullanım kolaylığı

ASP.Net MVC 2 ve önceki sürümlerinde MvcTurbine ve benzeri araçları kullanarak ASP.Net MVC uygulamalarımızda IoC uygulamalarımızı gerçekleştiriyorduk. ASP.Net MVC 3 sürümü ile ise, çözümü kendi içerisinde oluşturmayı amaçlayan Ioc ara yüz(interface) nesneleri bulunmaktadır.

Dynamic View ve ViewModel

Bu özellik ile .Net 4 yeniklerinde biri olan Dynamic Type özelliğini ASP.Net MVC içerisinde yer alması anlamına gelmektedir. Bu sayede sanki öyle bir özellik varmışçasına, söz konusu özelliği kullanabilmemize izin vermektedir. .Net 4 ile C# herhangi bir alanda hazırlanaDynamic işlemde olduğu gibi söz konusu tanımlama çağırıldığında hata olup olmadığı durumu anlaşılmaktadır.

Validation Impovemets

ASP.Net 4 ile birlikte gelene yeniliklerden bir tanesidir. Bu şekliyle ASP.Net 4 üzerine gelene gelişmiş doğrulama yapısını, ASP.Net MVC 3birlikte kullanabilmekteyiz.

Session Yönetimi(SessionState)

Geliştirmiş olduğumuz ASP.Net MVC projesinin içerisinde bulunan Controller nesnesini Session içerisinde veri taşıması istemeye biliriz. Bu gibi durumlar için geliştirilmişi Attribute yapısıdır.

Global Action Filters

Bazı durumlarda geliştirmiş olduğumuz ASP.Net MVC uygulamasının, uygulama yapılan her istemi denetlemek ya da uygulamalardan yapılan istemler sırasında gerçekleşecek işlemler olabilir. Bu gibi durumlar için geliştirilmiş bir yapıdır.

JavaScript ve AJAX yenlikleri

Standart bir ASP.Net MVC şablonu oluşturduğumuz varsayılan olarak projemize Script klasörü gelmektedir. Bu klasör içerisinde ise,ASP.Net AJAX ve JQuery ile ilgili JavaScirpt dosyaları gelmektedir. ASP.Net MVC 3 sürümü ile AJAX konusunda daha iyileştirilmiş bir şekilde kullanıcılarına sunulmaktadır.

Bir sonraki konuda ASP.Net MVC 3 için gerekli kurulum ve Razor görüntüleme motoru (Razor View Engine) veuygulamalar ile devam etmeye çalışacağım.

Kaynak:

http://alirizaadiyahsi.blogspot.com/2013/01/aspnet-mvc-dersleri-11-aspnet-mvc-nedir.html

http://www.yazilimdevi.com/yazilimdevi/Makaleler-532-asp-net-mvc-3-notlari-1giris.aspx

Bana Silverlight Anlat

meslek lisesi ders notları

Eren ÇOLAK

Yazılım Mühendisi Olmak Yolunda İlerliyor...