ASP.NET MVC Framework - III

Daha önceki MVC makalelerimizde bu kavramı incelemiş ve genel bir sorgu işlemi ile Product tablosunda yer alan ürün isimlerini sıralamıştık.

Bu makaleler eşliğinde bir LinQ to SQL 'in temel olarak nasıl kullanılabileceğine değinirken arka planda oluşturmuş olduğu kodların ve bu kodlara bağlı olarak yapabilecek olduğumuz işlemlerin oldukça fazla olduğunu incelemiştik. LinQ to SQL kodlarını incelediğimizde MVC için çalışma mantığını da çok az da olsa değinmeye çalışmıştık. Tekrardan bu mantığın nasıl işlediğini hatırlamak gerekirse, son kullanıcıdan sunucuya yapılan istek ile web sayfasına bir çağrı gelir. Bizim sayfamız için gerekli olan servis içerik kontrolleri yardımı ile hangi sayfanın çağırılacağı anlaşılır. Bu çağırılan sayfanın içeriğine bağlı olarak gerekli yönlendirmeler sonucunda veri tabanı işlemleri olacaksa bu işlemler için LinQ to SQL sınıfına gider verileri belleğe alarak kullanıma hazır duruma getirir. Hazırlanmış veriler doğrultusunda tekrardan yönlendirme görüntülenecek olan sayfaya geçirilir ve sayfa içerisinde veri gözlemlenmesi sonucunda işlemlerimiz devam ederdi.

Özellikle ilk makalelerimizde bu işlemleri yapmanın ne kadar kolay olduğu görmüşsünüzdür. Bu kolay işlemleri yaparken yönlendirme mantıklarını ve hangi sayfa çağırılırken hangi içeriğin gösterileceğine çok dikkat edilmesi gerekmektedir.

Yönlendirme işlemlerinden bahsetmişken isterseniz bir kez daha hatırlamaya çalışalım.



Yukarıdaki yönlendirme iÅŸlemi gelen isteÄŸe göre gerekli Controller ‘ı bulur sonrasında ise bu Controller gerekli web sayfasına göndererek iÅŸlemini yaptırır. Bu ana ÅŸablon iÅŸlemleri genellikle ilk sayfa çağırılmalarında veya bütün kayıtların listelendiÄŸi sayfalarda gerçekleÅŸtirilir. Daha kapsamlı iÅŸlemler için ise bu yönlendirme yapısını biraz özelleÅŸtirmemiz gerekecektir. ÖrneÄŸin karşımıza çıkan onlarca veriden ID numarasına baÄŸlı olarak tekini seçip bu seçtiÄŸimiz veri üzerinde iÅŸlemler yapmak istiyoruz. Bu iÅŸlemi gerçekleÅŸtirirken bizim yönlendirme yapımızın nasıl çalışacağı konusunda biraz yorum yapalım. DiÄŸer zamanlarda olduÄŸu gibi yine Controller son kullanıcıdan gelen ilk isteÄŸi karşılayarak gerekli olan yere göndermek için yönlendirme mantığında bir sonrakine bakar. Bu baktığı deÄŸer normal zamanlar için action olacaktır. Fakat bizim ÅŸimdi düşündüğümüz farklı zamanlar esnasında bu iÅŸlem nasıl yapılacaktır. Bu tür iÅŸlemleri yapacağımız zaman aklımıza MVC Framework öncesinde bu iÅŸlemleri nasıl yaptığımızı aklımıza getirelim. Genellikle bir sayfanın içerisindeki deÄŸerleri detay sayfasına yönlendirerek detaylarını göstermeye çalışırdık. Detay sayfasını ise hiçbir zaman ayrı ayrı oluÅŸturmazdık. Tek bir detay sayfası oluÅŸturur ve bu oluÅŸturduÄŸumuz detay sayfasının içeriÄŸini istek alınan ID ‘ye baÄŸlı olarak doldururduk.

MVC mimarisinde de bu mantıktan farklı bir yönü yoktur. Yine istek yapılan ID alınarak gerekli sayfa çağırılır ve iÅŸlemlerde ona göre yapılır. Fakat biraz önce yazdığımız cümleye dikkat etmelisiniz. ID ‘den alınan deÄŸerlere göre görüntülenecek sayfa çağırılır. Bu mantıktan yola çıkarak yönlendirme iÅŸlemlerimizde biraz deÄŸiÅŸiklik yapmamız gerektiÄŸini anlamış oluyoruz. Bu deÄŸiÅŸiklik ise ilk olarak ID ‘nin alınabilmesi için action ile ID ‘nin deÄŸiÅŸtirilmesi yeterli olacaktır.

Şimdi ise bir önceki makalede hangi ekran görüntüsünde kaldığımıza göz attıktan sonra bu makalemizde karşımıza çıkan listedeki sonuçları linkleyerek içeriklerini güncellemeyi nasıl yapacağımıza değinmeye çalışacağız.



En son Product sayfasında veri tabanında yer alan ürün isimlerini sıralamıştık. Artık bu ürün isimlerinin üzerlerine tıklayarak ayrıntılarını görmeyi ve düzenleme işlemlerini yapmaya başlayabiliriz. Fakat ilk başta yapmamız gereken bu ürün isimlerinin linklendirilmesi olacaktır.

Link verme işlemini yaparken a tagının içerisinde gidilecek yolu verir ve işlememizi tamamlardık.



Fakat bu iÅŸlemler MVC mimarisi kullanmadığımız zamanlar içindir. MVC mimarisinin temel kurallarına yeniden gerekirse, yönlendirme iÅŸlemlerinin hepsinin Controller katmanında olduÄŸunu ve bu sebepten dolayı da View ‘da herhangi bir yönlendirme iÅŸlemi yapmamız gerektiÄŸini hatırlarsınız. Yani yönlendirme iÅŸlemlerimizi Controller katmanını temel alarak yapmamız gerekiyor. Bu mantık ile yönlendirme iÅŸlemlerini yapmak istediÄŸimizde ise yazmamız gereken kod View klasörünün altında yer alan Home klasörünün altındaki herhangi bir web sayfasına iÅŸaret etmelidir.



Kodun altına yazmış olduÄŸumuz mesaja dikkat ederseniz yönlendirme sınıfında bulunan Controller ve Action deÄŸerlerini almış oluyor. Fakat bir eksik daha var. ID ‘yi nasıl alacak. Bunu almak için de dbml dosyamızın içeriÄŸinden yararlanarak ürünlerin ID ‘sini kullanabileceÄŸiz.



Bu ufak ID iÅŸlemi alma sonrasında ise internet tarayıcımızda linklerimizin gözüktüğüne ve bu gözüken linklerin ID ‘lerinin de durum çubuÄŸunda beliren linkte olduÄŸunu görebiliriz.



Fakat hala biraz önce bahsettiÄŸimiz mantığa ulaÅŸabilmiÅŸ deÄŸiliz. Åžu ana kadar yaptıklarımızın sonucunda tek tek sayfa açtırabiliriz. Bu sayfa açtırmanın yerine link ile aktarımın baÅŸlaması için 8 overload ‘ı olan ActionLink ‘i kullanmamız mantıklı olacaktır.

ActionLink ‘te string ifade tanımlamak, nesne olarak verileri algılatmak ve Expression metotları tanımlamak gibi bir çok aşırı yüklemesi vardır.

ActionLink kullanımını örnek üzerinden vermeden önce deÄŸinmek istediÄŸimiz birkaç püf nokta var. ActionLink MVC Framework ‘ün ASP.NET 3.5 Extensions ‘u ile gelen sürümünde yalnızca 3 aşırı yüklemesi bulunmaktadır. Bu aşırı yüklemelerin iyileÅŸtirilmiÅŸ ActionLink ‘in aşırı yüklemeleri arasındaki en büyük fark eski sürümde string, Object tiplerini alırken MVC Framework Preview 2 ‘de string, string, Object tipinde deÄŸerler alabilmektedir. Bu deÄŸiÅŸikliÄŸin uygulamalarımızı geliÅŸtirirken görülebilecek sorunları vardır. Bu sorunlar ise web servis kontrol sınıfına gidecek olan verilerde ortaya çıkacaktır.

Global.asax ‘imizin içeriÄŸinde alınan deÄŸerler {controller}/{action}/{id} biçimindedir. Bu deÄŸerlere ulaÅŸabilmek için ActionLink ‘ten eriÅŸim saÄŸlanabilir. Eski sürümünde bu iÅŸlem,



biçiminde gerçekleştirilebilirken, MVC Framework Preview 2 ile aşağıdaki biçimde kullanmamız gerekmektedir.



ActionLink kullanarak yukarıdaki kod parçasını uygulamamıza yazdığımızda ActionLink kullanmadan önceki işlem sonucuyla aynı sonucu verecektir.



Yukarıdaki ekran görüntüsünden de aynı sonucu verdiÄŸini görebiliriz. Bu iÅŸlemimizde Edit ‘i bizim belirlediÄŸimiz ActionLink ‘in içeriÄŸinden alacaktır. Edit yerine hede yazsak ta çalışması ile ilgili herhangi bir sorun çıkmayacaktır. Sadece linke tıkladığımızda hede.aspx sayfası uygulamamızda bulunmadığı için o sayfanın olmadığı hatasını verecektir.

Åžimdi routed sınıfını çağırarak yönlendirme iÅŸlemlerimizi kodu azcık deÄŸiÅŸtirelim. Orijinal hali {Controller}/{Action}/{id} ‘dır. Biz bu yönlendirmeyi {Controller}/{id}/{Action} olarak deÄŸiÅŸtiriyoruz. Bu deÄŸiÅŸikliÄŸin sonucunda biz uygulamaya ürünID ‘sini verene kadar bizim liste sayfamız açılmayacaktır. Bu sayede biz istemediÄŸimiz sürece veri tabanımızda bulunan binlerce kayıtta sayfada görüntülenmemiÅŸ olacaktır. Bunun en büyük katkısı sayfalarımızın oldukça hızlı açılıyor olmasıdır.



Yukarıda da gördüğünüz üzere ürünlerin ID ‘si bizim server kontrol sınıfında belirttiÄŸimiz gibi ortada gözükmüştür.

Şimdi tek sonuçlu ID alabilmemiz için Controller katmanımızda yer alan Home Controller sınıfının içerisine aşağıdaki kodu yazıyoruz.



Bu kod parçacığını yazdıktan sonra da tek sonuç döndürecek olan dc.product.Single kodumuzun olduğu bloğa BreakPoint koyarak uygulamamızı derliyoruz.

Web sayfamız çalıştıktan sonra karşımıza gelen ürün listesinden herhangi birini tıkladığımızda debug iÅŸlemimiz baÅŸlamış olacaktır. Burada bakacak olduÄŸumuz deÄŸer ID ‘nin doÄŸru olarak alınıp alınmadığı ile ilgili olacaktır.



Ä°stek yaptığımız ID ‘yi doÄŸru bir biçimde kodumuz algılamış. Peki, Action olarak belirttiÄŸimiz bölümü de uygulamamız anlamış mı? Bunu öğrenebilmek içinde uygulamamızın editörümüzün CallStack tagını inceleyebiliriz. Kontrol edeceÄŸimiz DLL MVC, ilgili sınıfta InvokeAction ‘dur. Bu ikisini bulduÄŸumuzda içeriÄŸinde yer alan ActionName ‘i Edit olarak aldıysa iÅŸlemimizin ilk adımını baÅŸarı ile gerçekleÅŸtirmiÅŸ oluyoruz.



Veri tabanında yer alan tabloların nerede tutulduğu konusunda kafanıza bir soru takılırsa ise bunun cevabı da Products olacaktır. Ayrıntılarını merak ederseniz faremiz ile ikonu üzerine götürdüğümüzde ayrıntıları karşımıza çıkacaktır.



Debug ‘ı bir alt koda geçirdiÄŸimizde hede ‘nin içeriÄŸi dolacak ve bizim istediÄŸimiz deÄŸerleri gösterecektir. Bunu görebilmek için yine fareyi hede ‘nin üzerine getiririz.



SeçtiÄŸimiz linkin adı, ID ‘si ve ürün numarası deÄŸerleri gözükmektedir.

Daha baÅŸka ayrıntıları da sizler isterseniz incelerseniz. debug iÅŸlemini tamamlayıp uygulamamızı derlediÄŸimizde bir hata mesajı alıyoruz. Bu hata mesajı Edit.aspx sayfasının olmadığını bize belirtiyor. Bizde hemen yeni bir sayfa ekliyoruz. Bu iÅŸlem için Home klasörünün üzerinde Add-->NewItem yolunu izledikten sonra karşımıza çıkan ekranda MVC View Content Page ‘i seçiyoruz. Bu seçeneÄŸi seçip tamama bastığımızda bizden içeriÄŸi belirleyecek olan Master page ‘i belirlememizi isteyecektir. Bunun içinde View klasörünün altında bulunan Shared klasörünün içerisindeki Master page ‘i sayfaya göstererek tamam dediÄŸimizde içeriÄŸi hazır bir sayfamız olmuÅŸ olur.

Edit.aspx sayfamız oluÅŸturulduktan sonra veri tabanı iÅŸlemini gerçekleÅŸtirebilmemiz için edit.aspx.cs ‘i açarak sınıfımıza Product ‘ı TViewData ‘nın içerisinde tanımlıyoruz. Bu iÅŸlemi yaparken aynı zamanda Uygulamamızın Model ‘ını isim alanı olarak da belirtmeyi unutmamamız gerekmektedir.



Yine eski sürümünden bir fark ile devam edelim. Bir önceki MVC sürümünde ASPX sayfasının görünen kod bölümünde Extension metotlarını kullanamıyorduk. MVC Framework Preview 2 ile artık extensionlar herhangi bir eklenti gerektirmeden sorunsuz bir biçimde kullanılabilmektedirler.



Formdan gelen iÅŸlemleri kullanabilmemiz için Controller ‘i ve ActionName ‘i tutabilmemiz gerekmektedir. Bunun içinde kodumuzun ilk bölümünü oluÅŸturabiliriz aÅŸağıdaki gibi oluÅŸturabiliriz.



Bu kodumuzu yazdıktan sonra uygulamamızı derleyerek yaptığımız işlemlerin doğru olup olmadığını kontrol edebiliriz. Bu kontrolü yapabilmek içinde ürünleri listelediğimiz sayfada herhangi bir linke tıklayarak edit.aspx sayfasına gitmesini sağlarız. Daha sonra karşımıza çıkan sayfanın kodlarını kaynağını görüntüle diyerek baktığımızda yaptığımız işlemin başarı ile gerçekleşmiş olduğunu görürüz.



Form action tagının ayrıntısına dikkat ederseniz bizim belirttiÄŸimizin dışında birde ID ‘si belirmiÅŸtir. Bu da yönlendirme olarak belirlediÄŸimiz {Controller}/{ID}/{Action} yapısına uygun olarak linki belirler ve gerekli olan sayfayı çağırır.

Şimdi güncelleştirme işlemlerinin gerçekleştirilebilmesi için gerekli olan form kontrollerini sayfamıza kod tarafından ekleyelim. Bu eklediğimiz kontrollerin içerisi istek yapılan linkin bilgileri ile otomatik olarak doldurulmasını istiyoruz. Bu işlemi gerçekleştirebilmek için kodumuzu aşağıdaki biçimde yazarız.



Sayfamızdaki değişiklikten sonra derlediğimizde Textboxlarımızın içeriği veri tabanındaki değeler yardımı ile dolar.



Veri tabanından aldığımız verileri formumuzda gösterdiğimize göre güncelleştirme işlemlerini yapmaya başlayabiliriz.

Home Controller sınıfını açarak aşağıdaki kodları yazıyoruz.



Uygulamamızı derlemeden önce Edit özelliÄŸinde yapmış olduÄŸumuz gibi update ‘te de Product.edi=… koduna BreakPoint koyuyoruz. Uygulamamızı derlemeden önce web sayfasının görünüm kısmındaki kodlarını aÅŸağıdaki yapıyoruz.



Bu deÄŸiÅŸiklik sayesinde Update kontrolünden yararlanırken yararlanma kriterimizde ürünlerin ID ’si olacaktır. Bu ufak deÄŸiÅŸikliÄŸi yaptığımıza göre uygulamamızı debug edebiliriz.

Web sayfası açıldığı zaman herhangi ürünü seçerek içeriğini güncelledikten sonra Submit yazan butona tıklayarak debug işlemini başlatıyoruz.

CallStack ‘te MVC.Controller.InvokeAction bölümüne bakarsak ActionName ‘i doÄŸru alıp almadığını görebiliriz.



Debug işlemini devam edipte ürünün isminin olduğu kod parçasının üzerine faremizi getirdiğimizde uygulamamızdan SQL işlemlerinin yapılması için değerlerin tutulmuş olduğunu göreceğiz.



Debug iÅŸlemine devam ettiÄŸimizde ürün numarasına ait kodun “CA-5965” ‘ten “CANER-5965” ‘e deÄŸiÅŸtirileceÄŸini görüyoruz.



Debug iÅŸlemimizi bitirdiÄŸimiz karşımıza boÅŸ bir ekran çıkmaktadır. Evet, güncelleme iÅŸlemimiz gayet güzel bir biçimde gerçekleÅŸti. EksikliÄŸi ise iÅŸlem bittikten sonra yönlendirileceÄŸi bir sayfanın olmamasıdır. Bu eksikliÄŸi de Controller sınıfının içerisinde Update özelliklerine RedirectToAction(“List”); kodunu yazarak yeniden yönlendirmesini Controller da ki List özelliÄŸine yapmasını isteriz. List özelliÄŸi de bize bütün ürünler listesini çıkartacaktır.

Tekrardan uygulamamızı çalıştırıp işlemlerimizi yaptığımızda uygulama sorunsuz bir biçimde çalışacaktır. Yeniden aynı seçeneği seçerek içeriği görüntülediğimizde değişikliğimizin gerçekleştiğini görmüş olacaksınız.



Güncelleştirme sonrası ürün özellikleri,



Güncelleme işlemlerini burada bitirmiş oluyoruz. Çok karmaşık gibi gözükse de kodlar bakımından bakıldığında toplam 15 satıra yakın kod hazırlanmıştır. Ayrıca uygulamamızın güvenliğinin de artmış olduğu işlerimizin göstergesidir.

Burada bir yazımızın daha sonuna gelmiÅŸ bulunuyoruz. Bu yazımız süresince kullanıcıdan alınan deÄŸeri nasıl uygulamamızda alabileceÄŸimizi ve bu aldığımız deÄŸerleri ID ‘ler yardımı ile nasıl kullanabileceÄŸimizi ayrıntılı bir biçimde incelemeye çalıştık. Bir sonraki MVC Framework makalemizde daha ayrıntılı bir örnek üzerinde daha karmaşık kodlar yardımı ile yapıyı incelemeye devam edeceÄŸiz.

Umarım yararlı olmuştur. Bir sonraki yazımızda görüşünceye dek esenlikle kalın.

Uygulamanın kaynak kodlarına linkten erişebilirsiniz. Veri tabanı dosyası kaynak kodlarda değildir. SQL server örnek veritabanından erişebilmeniz mümkündür. Sizin örneği çalıştırabilmeniz için WebConfig dosyasında gerekli düzenlemeleri yapmanız gerekmektedir.

Yorum Gönder

0 Yorumlar

Ad Code

Responsive Advertisement