Osman KURT

Yazılım Uzmanı | MVC Eğitmeni

ASP.Net MVC Entity Framework Select, Insert, Update ve Delete işlemi

Microsoftbazı projeleine yıllar boyu destek verirken bazı projelerinide elinin tersi ile itiyor ve kısa sürede öldürebiliyor. Bunlara örnek vermek gerekirse XP :)

XP uzun yıllar hayatımızda olan bir işletim sistemi. Belki de belli bir zamana kadar microsoft'un bizlere kazandırdığı en değerli ürünüydü ama herşey gibi onunda sonu geldi tabi. Diğer türlü öldürdüğü yazılımlarına teknolojilerine gelirsek mesleğimle ilgili olan linq teknolojisi. Zamanın öğreneilmesi gereken bir teknolojiydi ama microsoft ani bir kararla artık bu teknolojiyi update etmeyeceğini ve yoluna entity framework ile devam edeceğini açıkladı.

Benimde gerçekten kullanmaktan zevk aldığım bir teknoloji her ne kadar arka kısımda bazı "?" işaretleri olsada kullanmakatan zevk alıyorum diyebilirim.

Bu yazımda size kısaca insert, update ve delete işlemlerinden bahsedeceğim. İlk olarak insert işleminden başlayalım isterseniz.

Firmalar adında bir tablomuz olsun ve bu tablomuzun FirmaAdi alanına 1 adet kayıt eklemek isteyelim.

Firmalar FrAdd = new Firmalar();
FrAdd.FirmaAdi = fir.FirmaAdi;
entity.Firmalar.Add(FrAdd);
entity.SaveChanges();

İşte bu kadar basit. Tablomuzu türetiyoruz verimizi eşitliyoruz hangi tablomuza kayıt atacağımızı belirledikten sonra Entity SaveChanges diyerek kayıt işlemimizi tamamlıyoruz. Unutmamamız gereken nokta her işlemden sonra Entity.SaveChanges(); mutlak suretle yazmamaız aksi takdirde yapılan işlem gerçekleşmeyecek.

Peki update kodumuz nasıl olacak.

Firmalar FirmaDetay = (from a in entity.Firmalar where a.FirmaID == id select a).FirstOrDefault();
FirmaDetay.FirmaAdi = fir.FirmaAdi;
entity.SaveChanges();

Bu işlemimiz de bu kadar. İlk yapılan update yapılacak verimizi select yapmak istediğimiz alandaki değişiklikleri eşitledikten sonra Entity.SaveChanges(); diyerek yapılan işlemi DB ye Execute etmek.

Kısaca silme kodumuz ise aynı şekilde select işlemi yapıldıktan sonra,

var FirmaDetay= (from a in entity.Firmalar where a.FirmaID== id select a).FirstOrDefault();
entity.Firmalar.Remove(FirmaDetay);
entity.SaveChanges();


Bu işlemimiz de son bulduğuna göre artık yazımızı sonlandırmanın zamanı geldi select işlemi hem Update hemde Delete kod bloglarında olduğu için yeniden yazma gereği duymadım. O kısımdan bakabilirsiniz.

Tekrar görüşmek üzere,

Osman KURT
Yazılım Uzmanı

Asp.Net MVC'de Mobil Uygulamalar İçin Dinamik Layout Seçimi

.Net mvc kullanarak çok güzel bir sayfa hazırladık her şey gayet güzel çalışıyor ama tek bir sorun var. Ziyaretçi sayfamıza normal bir bilgisayardan değil de tablet yada mobile bir cihazdan giriş yaparsa ne yaparız. Sayfamız tasarım olarak girilen cihaza uyum sağlar mı yada performanslı çalışır mı?

En basiti olarak ben ikinci bir masterpage tasarlama yolunu bu yazımızda göstermek istedim. Tabi siz html bilginize güveniyorsanız ve ben gayet güzel responsive tasarım hazırlayabilirim diyorsanız bu size kalmış şimdiden elinize bilginize sağlık. 

 

Dedim ya kullanımı kolay diye tek bir kod bloğu ile bunu halledebiliyoruz.

@{
 Layout = Request.Browser.IsMobileDevice ? 
"~/Views/Shared/_LayoutM.cshtml"
 : "~/Views/Shared/_Layout.cshtml";
 }

İşte bu kadar basit artık mobile bir cihazdan girildiğinde otomatikman LayoutM masterpage sayfamız kullanılmaya başlanacak ve tasarım olarak herhangi bir problem yaşamayacağız.

Osman KURT
Yazılım Uzmanı

Asp.net MVC Dersleri Verilir - Asp.net MVC Egitimi

.Net platformunun yeni ve kalıcı yüzü olan mvc'de söz sahibi olmak, piyasaya kaliteli hizmet vermek ya da piyasada daha kolay ve sağlam bir iş sahibi olmak isteyen kişilere asp.net mvc eğitimi verilir. Verilecek eğitimden sonra mvc'de sıfırdan bir proje nasıl oluşturulur, model controller view yapıları, data katmanı vb gerekli bütün bilgileri bulabileceksiniz. Eğitimin sonunda benim danışmanlığım da yapacağınız bir proje ile (istenilen proje yapılabilir) edindiğiniz bütün bilgileri pekiştirecek gerçek hayatta karşılaşacağınız problemlere ne tür hızlı ve doğru çözümler bulabileceğinizi öğreneceksiniz.

Lafı uzatmadan anlatmak gerekirse okullarda öğrendiğiniz gereksiz bilgilerin gerçek hayatta hiçbir işe yaramadığını anlayan kişiler bu yazıyı okuyorsanız üst kısımda ne demek istediğimi gayet iyi anladınız demektir. Eğer ki bu meslekten ekmek yemek istiyorsanız ya büyük kurslara çuvalla para yatıracak bir grup insan içinde öğrenmek için çabalayacaksınız ya da birebir daha az ücret karşılığında hem de piyasanın içinden bir yazılımcıdan eğitim alacaksınız karar sizin.

İrtibat: iletişim sayfasından ya da info@osmankurt.net

Görüşmek üzere

Osman KURT
Yazılım Uzmanı

 

ASP.Net MVC'de Validation Kontrolü Oluşturma

Merhaba arkadaşlar,

Bugün ki yazım da sizlere asp.net mvc üzerinde ki herhangi bir form üzerin de çalışırken yapılması gereken validation kontrollerini nasıl yaparız onları göstermeye çalışacağım ve bir örnek paylaşacağım. Lafı uzatmadam bir adet mvc 4 projesi oluşturalım.

Daha sonra oluşan projemize bir adet HomeController ekleyelim. HomeController'ımız içine Index actionview hazır halde geliyor çalışmamızı bu sayfa üzerinden gerçekleştireceğiz. Bu Yüzden Index üzerine sağ tıklayıp Add View diyerek view ekranımızı oluşturmanız gerekmekte. Şimdi Controller ve View ekranlarımızı oluşturduk ve bu view ekranın da kullanacağımız modelimizi yapmaya geldi sıra. Models klasörümüze sağ tıklıyoruz ve bir adet class oluşturuyoruz. Ben adını Ornek koydum ve bu classımızın içine deneme amaçlı 1 adet propertie ekliyoruz. Ekranlarımız alt kısımlarda ki gibi olmalı.

HomeController;

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ValidationApplication.Models;

namespace ValidationApplication.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/

        public ActionResult Index()
        {
            ViewBag.Mesaj = "";
            return View();
        }
        [HttpPost]
        public ActionResult Index(Ornek Orn)
        {
            if (Orn.OrnekAlanBir == null) { ModelState.AddModelError("OrnekBir", "Örnek Bir Alanını Boş Geçemezsiniz"); }
            if (ModelState.IsValid)
            {
                ViewBag.Mesaj = "İşlemimiz Başarılı";
            }
            return View();
        }
    }
}

 

View;

@model ValidationApplication.Models.Ornek
@{
    ViewBag.Title = "Index";
}
<h2>
    Örnek Uygulamam</h2>
@using (Html.BeginForm("Index", "Home"))
{
    <table>
        <tr><td colspan="2" style="color: Red;">@Html.ValidationSummary()</td></tr>
        <tr><td>Örnek Alan Bir:</td><td>@Html.TextBoxFor(m => m.OrnekAlanBir)</td></tr>
        <tr><td><input id="Submit1" type="submit" value="submit" /></td><td></td></tr>
        <tr><td>Sonuç:</td><td>@ViewBag.Mesaj</td></tr>
    </table>
}

Model;

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ValidationApplication.Models
{
    public class Ornek
    {
        public string OrnekAlanBir { get; set; }
    }
}

 

Ekran Çıktımız;

 

 

Örnek Uygulama:

ValidationApplication.rar (2,28 mb)

İşlemlerimiz bu kadar arkadaşlar yararlı olması dileğiyle.

Görüşmek üzere,

Osman KURT

Yazılım Uzmanı

ASP.Net MVC de Ajax İşlemi

Bu yazımız da asp.net mvc de sayfamızı post etmeden database'mize kayıt yapmaya öğreneceğiz.

İlk olarak yapmamaız gereken 1 adet mvc projesi oluşturmak (Ben mvc 4 oluşturdum). Üzerin de çalışma yapabilmemiz için bir adet database oluşturuyoruz ve 1 tablo açıyoruz içine (DataBase: KariyerSoftDB, Table Name: KariyerSoftDB, Alanlar: PageID(int), PageName(nvarchar(50)), PageDescriptions(nvarchar(max))) olarak ayarlıyoruz.

Daha sonra Model klasörümüze gelerek içine alt kısımda ki propertilerimizi ve ekleme işlemin de kullanacağımız kodlarımızı yazıyoruz (Uyeler.cs).

 

[Serializable]
    public class Uyeler
    {
        public string PageName { get; set; }
        public string PageDescriptions { get; set; }

        public bool Ekle(Uyeler uye)
        {
            bool sonuc = false;
            SqlCommand cmd = new SqlCommand("Insert into Tbl_Page (PageName,PageDescription) values (@PageName,@PageDescription)", baglan.baglanti);
            cmd.Parameters.AddWithValue("@PageName", uye.PageName);
            cmd.Parameters.AddWithValue("@PageDescription", uye.PageDescriptions);
            if (ConnectionState.Closed == baglan.baglanti.State)
                baglan.baglanti.Open();
            int deger = cmd.ExecuteNonQuery();
            if (deger > 0)
            {
                sonuc = true;
            }
            else
            {
                sonuc = false;
            }
            return sonuc;
        }
    }

    [Serializable]
    public class Sonuc
    {
        public string Mesaj { get; set; }
    }

 

Bu arada kodlarımız arasın da bulunan Baglan.cs classımız var unutmadan onu da oluşturalım.

 

public class baglan
    {
        public static SqlConnection baglanti = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=KariyerSoftDB;Integrated Security=True");
    }

 

Evet şimdi model ile olan işimiz bitti ve views kısmına geçiyoruz. Bu kısım İçin alt kısımda ki kod yapımızı kullanacağız. Yaptığımız işlemler ise bir form oluşturmak ve oluşturduğumuz bu formlarda ki runtime verileri script yardımı ile alarak json veri tipin de model yardımı ile controller kısmın da işlemek. Kodları incelediğiniz siz de emin ki mantığını kavrayacaksınız.

    <script type="text/javascript">
        $(function () {
            $("#uyeKayit").click(function () {
                var gelen = Veriler();
                var jsonData = JSON.stringify(gelen);
                $.ajax({
                    url: "/Home/UyeKayit",
                    type: "Post",
                    data: jsonData,
                    dataType: "json",
                    contentType: "application/json; charset=utf-8",
                    success: function (data) {
                        var sonuc = data.Mesaj;
                        $("#Sonuclar").html(sonuc);
                    }
                })
            });
        });

        function Veriler() {
            var PageName = $("#pagename").val();
            var PageDescriptions = $("#pagedescriptions").val();
            return (PageName == "") ? null : { pagename: PageName, pagedescriptions: PageDescriptions };
        }
    </script>
    <h2>
        Mvc 3 ile Json Veri Gönderimi</h2>
    <div style="font-family: Verdana; font-size: 12px;">
        <div style="padding: 15px 0;">
            <span id="Sonuclar"></span>
        </div>
        <div style="padding: 5px 0;">
            Sayfa Adı</div>
        <div>
            <input type="text" id="pagename" />
        </div>
        <div style="padding: 5px 0;">
            İçerik</div>
        <div>
            <input type="text" id="pagedescriptions" />
        </div>
        <div>
            <input type="submit" value="gönder" id="uyeKayit" />
        </div>
    </div>

 

Son olarak controller kısmımız da kodlarımızı işlemeye geldi sıra.

 

[HttpPost]
        public ActionResult UyeKayit(Uyeler uyeler)
        {
            Uyeler uye = new Uyeler();
            uye.Ekle(uyeler);
            string bilgiler = string.Format("Adınız : {0}, Soyadınız : {1}", uyeler.PageName, uyeler.PageDescriptions);
            //return Json(new Sonuc() { Mesaj = bilgiler });
            return Json(new Sonuc() { Mesaj = "İşleminiz Başarı İle Gerçekleşmiştir" });
        }

 

Kaynak Kod:

osmankurtnetjson.rar (6,48 mb)

Yararlı olması dileğiyle;

Osman KURT

.Net Yazılım Uzmanı

Neden ASP.Net MVC Diyenlere Gelsin

ASP.NET Web Forms’un Nesi Yok ki!?

Aslında kısa cevap olarak, “fazlası” bile var denilebilir. Evet belki de Web Formları ilk zamanlarda çok iyi bir fikirdi. Fakat gerçekte durum biraz daha karışık. Gerçek hayatta Web Formlarını projelerde kullandıkça bazı durumlar ortaya çıkmıştır. Tabi bu durumlar zaman içinde bir çok kullanıcının deneyimi ile ortaya çıkmış eksikliklerdir. Bu eksiklik ya da gereksiz fazlalıkları şu şekilde maddelendirebiliriz:
•View State Ağırlığı: View State olarak bilinen, istekler arasında durumları muhafaza etme mekanizması, client ve server arasında çok büyük boyutlarda veri transferine sebep oluyor. Bu veri boyutu, mütevazi bir sitede bile yüzlerce kilobayta varabiliyor. Üstelik bu veri, gönderilmekle kalmıyor tekrar geri geliyor ve her istekte veri iletimindeki miktar katlanarak büyüyor. Bu server üzerindeki bandwidth kullanımını artırdığı gibi, sitenin yavaş tepkilerinden dolayı site ziyaretçilerinin sinirlerinin bozulmasına da sebebiyet veriyor.
•Sayfa Yaşam Döngüsü: Sayfa yaşam döngüsünün önemli bir parçası olan, client yani istemci tarafındaki event‘lar(olaylar) ile server tarafındaki event handler kodları arasındaki iletişim, aşırı derecede kompleks, karışık ve bir o kadar da narin, çıt kırıldım olabiliyor. Çok az geliştirici View State hataları olmadan çalışma zamanında bileşenlerin(kontrollerin) üzerinde düzgün bir şekilde değişiklik yapabiliyor ya da çok az geliştirici gizemli bir şekilde çalışmayan event handler‘ları farkedebiliyor.
•Kod Ayrımı Hakkındaki Yanlış Düşünceler: ASP.NET’in code-behind modeli, HTML kodları ile uygulama kodlarını farklı bir dosyada ayırmaya yarıyor. Sunum kısmı ile uygulama kod kısmını ayırdığı için bu model, oldukça alkış getirdi ve takdir gördü. Fakat gerçekte, geliştiriciler sunum kodları(server kontrollerini değiştirmek gibi..) ile uygulama mantık kodlarını(veritabanını kodları gibi…) bu korkunç code-behind sınıflarında birleştirmeye başladılar. Bu da çoğu zaman manasız ve narin, kolay bozulan bir sonuca dönüşmesine yol açmıştır ve açmaktadır.
•HTML Üzerinde Kısıtlı Kontrol: Server kontrolleri kendilerini HTML olarak render ederler yani bize sonuç HTML kodları olarak gelir. Fakat bu çoğu zaman sizin istediğiniz HTML kodundan gereksiz bir çok kod barındırır. ASP.NET 4′den önce genellikle bu çıktı kodu, web standartlarına uygun değildi veya bunlar üzerinde iyi bir CSS kullanımını zorlaştırıyordu. Ayrıca server kontrolleri Javascript tarafından ulaşılması zor olan, tahmin edilmesi zor ve karışık ID değerleri üretiyorlardı. Her ne kadar ASP.Net 4 ile bu problemler azaltılmışsa da beklediğiniz HTML’yi elde etmeniz halen sıkıntılı olabiliyor.
•Zayıf Soyutlama: Web Formları mümkün olduğunca HTML’yi sizden gizlemeye çalışır. Yeni ve özel bir davranışı tanımlamaya çalıştığınızda, genellikle bu soyutlamayı bozarsınız. Ki bu sizi postback event mekanizmasında ters mühendislik metodları kullanmanızı ya da istediğiniz HTML’yi elde etmek için duygusuz ve absürd kodlar yazmanıza sebep olur. Ben buna amele mantığı kod yazmak diyorum . Ek olarak tüm bu soyutlama hadisesi, işin ehli web geliştiricileri için sinir bozucu bir engelden öteye gidememektedir.
•Düşük Test Edilebilirlik: Her ne kadar unit-test yani otomatikleştirilmiş testlere ilgim olmasa da, unit-test kullanan geliştiriciler için Web Formları bir çileden ibaret olmuştur. Web Formlarının bu kapalı hali unit testi için uygunsuz bir durum teşkil etmektedir Projeye unit-test dahil etmenin zorluğu da cabası…

Her ne kadar ASP.NET 4 ile burada bahsedilen bazı problemlere çözüm getirilmeye çalışılmışsa da halen çoğu kısıtlamalar ve eksikliker aynen durumunu muhafaza etmektedir.

Model, View, Controller

MVC başlıca şu üç ana daldan oluşan bir yazılım geliştirme tekniğidir:
•Model: İletimde kullanılan ya da veritabanı gibi ortamlarda kullanılan veriyi ifade eden basit sınıflardır. Web programlamada bu genelde formun POST verileri ya da veritabanındaki bir tabloyu ifade eden bir sınıf olabilir. Sonuçta View ve Controller arasında veri iletimini Modeller ile gerçekleştirmekteyiz.
•View: Sunum kısmıdır. Yani bu web prgramlama için html sayfasıdır. Razor söz konusu olduğunda dosya uzantısı “.cshtml” dir. Eğer Aspx görünüm motoru kullanılıyorsa bu uzantı “.aspx” olacaktır. Görünüm motorları(View Engine) ve Razor hakkında ileride daha genişçe bahsedeceğiz.
•Controller: Esas iş gören uygulama kodlarıdır. Mesela bu, form verilerini veritabanına ekleyen bir sınıf olabilir. Sonuçta view katmanının kullanıcıya gösterilmesi için gerekli işlemleri controller gerçekleştirecektir.

Sizi çok terim ile boğmak istemiyorum. Daha fazla bilgi edinmek isterseniz burayı ziyaret edebilirisiniz.

Bir iletişim sayfasını gözümüzün önüne getirelim. Ne vardır basit bir iletişim sayfasında? Ad soyad, e-posta gibi bilgilerin girildiği bir textbox, mesajın yazılacağı bir textarea ve mesajın gönderileceği bir submit düğmesi. Submit düğmesine tıkladığınız anda, form post edilir ve gerekli kontroller yapılarak e-posta gönderilir ya da kullanıcıya hata verilir. MVC mantığı ile düşündüğümüzde, içinde textbox, textarea, button bulunduran sayfamız View katmanıdır. Form post olduktan sonra gelen verilerin uygunluğunu test eden ve e-postanın gönderimini sağlayan kısım ise Controller‘dır. Model ise bu iki katman arasında gelip giden form’un post verilerinin şablonudur. Bu örnek için textboxlardaki ad soyad ve e-posta bilgileri ve textarea’daki mesaj verisi Model ile ifade edilir.

Model ve Controller “.cs” uzantılı bir dosyada bulunan sınıflardan ibaretken View “.cshtml” uzantılı c# ve html kodlarının karışık olduğu bir dosyadır. Bu uzantıların C#’a ait uzantılar olduğunu ifade etmek istiyorum. Eğer Vb.Net kullanıyorsanız bu uzantılar “.vb” ve “.vbhtml” olacaktır. Veya Razor yerine başka bir görünüm motoru kullanıyorsanız “.cshtml” uzantısı değişiklik gösterecektir.

MVC aslında yeni bir teknoloji olmadığı gibi mucidi Microsoft da değildir. MVC, kökleri 1978 yılına dayanan ve Xerox PARC da Smalltalk projelerinde kullanılmış bir yöntemdir. Fakat günümüzde web programlamada ciddi ölçüde popülerlik kazanmıştır. Özellikle Ruby on Rails ile bu had safhaya ulaşmıştır. Ruby on Rails‘in bu popülerliği o kadar artmıştır ki Microsoft’un gözünü açmasına sebep olmuştur. Ruby on Rails‘in bu başarısını, kullandığı dilden çok, içine monte edilen MVC ve ORM mimarilerine bağlamak gerekir. Microsoft sadece MVC’ye el atmamış, ayrıca bir ORM mimarisi olan Entity Framework ve beraberinde LINQ de .NET’e dahil olmuştur. Evet ORM’nin ünlü olmasına sebep LINQ ve Entity Framework değildir aslında.

Şu an için bir çok dilde MVC yapısını kullanan kütüphaneler mevcuttur. Mesela php’de CakePhp, Symfony ve Mojavi MVC kütüphanelerine en güzel örneklerdendir. Fakat bulabileceğiniz çoğu MVC kütüphanesi Rails’den esinlenmiştir.

Belki şu an için kafanızda MVC ne olduğuna dair somut bir fikir oluşmamış olabilir. Makelenin sonununda vereceğimiz küçük örneği kendiniz yaparak somut fikir edineceğinizi tahmin ediyorum.

ASP.NET MVC

MVC mimarisi, Web Forms mimarisinden farklı bir yapıya sahiptir. Web Formlarında tut-taşı mantığı ile çok hızlı bir şekilde siteler oluşturabilirsiniz. Fakat iş yukarıda da bahsettiğimiz gibi özelleştirmeye ve temiz html kodlarına geldiğinde, durum biraz değişiyor. ASP.NET MVC, temiz, standartlara uyumlu html kodları üretmenin farkındadır. Ve barındırdığı Html yardımcı metodları, Web Formların aksine, ciddi ölçüde temiz ve standart uyumlu kodlar üretirler. Küçük bir kontrol için bile bir çok hantal ve karışık kodlar üretmek yerine, CSS ile şekillendirilmiş gayet basit ve hoş kodlar üretir.

Hemen akla gelen, Web Formlarındaki gibi, kodları hazır, menü ve tarih seçici gibi bileşenleri olsa iyi olmazmıydı. Bunun için en iyi çözüm jQuery gibi javascript bileşenleri olacaktır. İşin gerçeği Web Formları kullanırken bile Web Formlarının varsayılan bileşenleri yerine bu tarz bileşenleri daha fazla kullanmaktayız. Bununla birlikte ASP.NET MVC dahili jQuery desteğine sahiptir. Eğer bir fikir edinmek isterseniz buraya göz atabilirsiniz.

Web Formlarının aksine, ASP.NET MVC ile üretilmiş sayfalar View State namına hiç bir veri içermezler. Bu yüzden küçük bir site için bile yüzlerce kilobayt boyutunda olan bu hantallıktan kurtulmuş olursunuz.

Ayrıca ASP.NET MVC mükemmel bir yönelendirme sistemine sahiptir. Bu sayede şu şekildeki bir urlyi:

/web_motoru/Makaleler/Default.aspx?islem=goster&makale_id=41567&sayfa=1

daha temiz ve kullanıcılar için ve seo için daha uygun bir şekle zahmetsizce çevirebilirsiniz:

/makale/mvc-ve-razor/sayfa-1

Böylesine bir yapı hem SEO için hem kullanıcılar için hem de güvenlik için daha kullanışlı olacaktır.

Bunun dışında söyleyebileceğim başka bir şey de, ASP.NET MVC’nin açık kaynak kodlu olduğudur. Bunun bize getirdiği en büyük faydalardan biri şüphesiz debug aşamasında ortaya çıkmaktadır. Sistem bileşenlerinin nasıl çalıştığını görebileceğiniz gibi geliştiricilerin yorumlarını bile kodlarda görebilirsiniz.

Başka bir şey ise, MVC stateless dediğimiz bir yapıya sahiptir. Yani Web Formlarında olduğu gibi sayfanın o anki durumu kayıt altında tutulmaz. Tersine bu yapıya tamamen karşı bir yapıya sahiptir. Bu yüzdendir ki önceden bahsettiğimiz gibi View State’e ihtiyaç duymaz ve kullanmaz.

Razor

Microsoft sadece MVC ve ORM mimarilerini ASP.NET ortamına taşımakla kalmamış yeni bir görünüm motoru da kazandırmıştır. Görünüm Motoru(View Engine), uygulama kodları ile(bu makale için C#), html ve benzeri text tabanlı verileri iç içe kullanmanızı sağlar. ASP.NET MVC için tanımlanmış bir çok görünüm motoru bulunmaktadır. Bunların başlıcaları, Spark, SharpTiles, NHaml, WebForms(ASPX) ve Razor.

Kısacası; Spark, html benzeri bir gramere, SharpTiles java kullanıcılarına yakın bir gramere ve NHaml ise Rail benzeri bir gramere sahip. WebForms ise bildiğimiz ASPX görünüm motorudur. Tüm kodlar <% ve %> işaretleri arasına yazılır.

Razor, Microsoft tarafından geliştirilmiş olan yep yeni bir gramere sahip bir görünüm motorudur. Yeni gramer derken sakın korkmayın. Çünkü Razor diğer görünüm motorlarında olduğu gibi sizi yeni bir grameri öğrenmek zorunda bırakmaz. Kullanacağınız dil yine C# gibi bir .net dili olacaktır. Kısaca Razor:
•Az yer kaplayan, kompakt, anlamlı ve akıcı bir yapıya sahiptir.
•Öğrenmesi çok kolaydır.
•Sizi yeni bir dil öğrenmek zorunluğundan kurtarır.
•Çok çok iyi bir Intellisense desteği mevcuttur.
•Unit-test’lerine uygun bir yapısı mevcuttur.

Kaynak: Fatih Tolga ATA, bu yazı o kadar açıklayıcı olmuş ki soran arkadaşlar için iyi olur dedim :D

.Net yazılım uzmanı

.Net MVC'de Tek Sayfa da Birden Fazla Model Kullanımı

Yeni yazmakta olduğum bir proje de karşılaştığım bir problem arkadaşlar, birden fazla modelimizi tek sayfa da kullanmak. Mvc de sayfa kodlama nasıldır kısaca onu özetlemek gerekirse, Bildiğiniz üzere bir ader modelimiz vardır modelimiz de propertilerimizi tanımlarız, daha sonra oluşturduğumuz modelimizi view sayfamıza referans olarak ekleriz views ekranımızın iç kısmını doldurduktan sonra controller kısmın da ise arka plan kodlarımızı gerçekleştiririz.

Buraya kadar herşey normal, peki aynı sayfa içinde iki modeli de kullanmak gerekir se ne yapacağız. İşlem basit arkadaşlar. Bir adet daha model oluşturuyoruz ve daha önceden oluşturduğumuz ve aynı sayfa da kullanmak istediğimiz modellerimizi bu modele ekliyoruz. Eklediğim örnek ta tam kullanımı mecuttur. Daha sonra en son oluşturduğumuz modeli views ekranımıza model olarak atıyoruz. Artık en son oluşturduğumuz ana modelimize eklenen bütün modellerimiz tek sayfa da kullanımımıza açık hale geldi. Kolay gelsin.

Gerekli örnek uygulamanın ufak bir giriş kısmını eklediğim örnek de bulabilirsiniz gerekli icelemeyi yaptıktan sonra fikir sahibi olacağınızdan eminim arkadaşlar.

Görüşmek üzere,

Osman KURT

.Net Yazılım | Yazılım Uzmanı

Örnek Uygulama (263,11 kb)

ASP.Net MVC de @Html.DropDownListFor (Doldurmak) Kullanımı

Bu yazımız da asp.net de @Html.DropDownListFor kullanımı göstereceğim. ilk olarak kısaca mvc den bahsetmek gerekirse biliyorsunuz tamamı ile modeller üzerinden işlerimiz ilerlediği için bizde model üzerinden işlemimizi kullanılır hale getireceğiz. Öncelikle elimiz de bir access db olduğunu varsaylım ve Sayfalar adında bir tablomuz olsun. Bu tablomuzun da SayfaId(sayi),SayfaAd(metin),Icerik(not),RootID(sayi) gibi alanları olsun.

İşe ilk olarak bir model oluşturarark başlayalım isterseniz ve içine alt kısımda ki gibi propertilerimizi tamınlayalım.

 

public class Pages
    {
        public int SayfaId { get; set; }
        public string SayfaAd { get; set; }
        public string Icerik { get; set; }
        public int RootID { get; set; }
    }

 

 

Şimdi modelimizi oluştuduk dropumuzu doldurmak için bir fonksiyona ihtiyacımız var onuda alt kısımda ki yaptım ben ama siz farklı şekilde de yapabilirsiniz. Yeter ki geriye list döndürsün.

 

public class Pages
    {
        public int SayfaId { get; set; }
        public string SayfaAd { get; set; }
        public string Icerik { get; set; }
        public int RootID { get; set; }


        public List PageList()
        {
            List PList = new List();
            OleDbCommand cmd = new OleDbCommand("Select * from Sayfalar", baglan.baglanti);
            if (ConnectionState.Closed == baglan.baglanti.State)
                baglan.baglanti.Open();
            OleDbDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                Pages page = new Pages();
                page.SayfaId = Convert.ToInt32(dr["SayfaId"].ToString());
                page.SayfaAd = dr["SayfaAd"].ToString();
                page.Icerik = dr["Icerik"].ToString();
                page.RootID = Convert.ToInt32(dr["Root"]);
                PList.Add(page);
            }
            dr.Close();
            baglan.baglanti.Close();
            return PList;
        }
    }

 

 

Şimdi elimiz de bir adet modelimiz var ve bu modellerin içinde ise list döndüren bir fonksiyonumuz var. Gelelim ön kısmımıza.

Öncelikle Index sayfasında işlemi yapacağız. Bu yüzden de elimiz de 1 adet view 1 adet de controller var. ilk önce controller kısmında li ActionResult Index alanımıza bir adet ViewBag tanımlıyoruz ki içinde rahatça gezebilelim. Alt kısıma uygun kodu bulabilirsiniz.

 

public ActionResult Index(Pages Page)
        {
            ViewBag.PageList = Page.PageList();
            return View();
        }

Bu kodumuzu da yazdıktan sonra geriye kalan tek sayfamız view da ki Index sayfamız. Bu sayfamıza da Öncelikle en üst kısmında modelimizi tanımlamak şartı ile alt kısımda ki kodlarımızı uyguluyoruz.

 

@model KariyerMVC.Models.Pages

 

Şimdi ki esas kodumuz;

 

@Html.DropDownListFor(model => model.RootID, new SelectList(ViewBag.PageList, "SayfaId", "SayfaAd"))

 

Üst kısımda ki kodumuz da ViewBag.PageList içinde ki SayfaId ve SayfaAd kısımlarını aldım drop için de listeledim. Seçilen değeri de herhangi bir kayıt yada update,silme gibi işlemler de kullanmak üzere RootID değerine atadım.

*Not

Kod için de bulunan bağlan classımız;

 

public class baglan
{

    public static OleDbConnection baglanti = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\yazilimuzmani.mdb;Mode=ReadWrite;Persist Security Info=False");

}

 

Umarım faydalı olmuştur.

Görüşmek üzere

Yazılım uzmanı

 

MVC 3 ile Layout (Masterpage) Kullanımı

Asp.net de bir web projesi geliştirdiyseniz kesinlikle masterpage ve contentplaceholder yapısını kullanmışınızdır.
Nasıl olurdu?
Bir proje oluşturursunuz daha sonra projenin içine bir adet bütün sayfalarda kullanmak üzere masterpage oluşturursunuz genel kodlarınızı bunun içine yazarsınız ve kullanıma açmak istediğiniz alanlara contentplaceholder koyarsınız ki diğer iç sayfalar da bu alanları kullanabilesiniz.

Aynı durum MVC için de geçerli.

MVC orje oluştururken de masterpage yerine Layout dediğimiz MVC’nin masterpage’lerini ekliyoruz. Araların a fark yok denecek kadar az. Ama bir sıkıntı var. Normal projelerimiz de kulandığımız sağ kısımda ki toolbox da contentplaceholder yok! ne yapmamaız gerekecek.
İşte burada devreye @RenderBody() dediğimiz sistem giriyor ve bizi aydınlatıyor. Tek yapmanız gereken yan kısımda ki kodu layout sayfamızın kullanmak istediğimiz kısmına yazmak.
Ayrıca her sayfa da tek tek kullanıma açmaya da gerek yok çünkü otomatik olarak görecektir ve alanı kullanmaya başlayacaktır.


Aynı master da ilinci @RenderBody() kullanmak diye bir sorunuz varsa da, üzgünüz kullanamıyorsunuz. Onun yerine @RenderSection(“Etiket”) kodumuz var. Bu kodumuzun kullanımını da bir sonra ki yazımızda göstereceğim.


Görüşmek üzere
Osman KURT