Route dediğimiz olay; hazırladığınız web alt yapısının internet ortamından bulunmasını sağlar. Sizin web altyapınız ne kadar özgün ise diğer kullanıcıların sizi bulması kadar kolay olacaktır. Bu bulmayı kolaylaştıran yapı da Route yapısıdır.
Klasik ASP.NET ortamındaki işleyiş şekildeki gibidir. Yani sayfa isteğiniz ASP.NET sunucusuna gidr ve size sayfa sunulur.
Oysa MVC 5 yapısında site ismi yazdığınızda route tarafından bilgiler değerlendirilerek uygun action metodunun çıktısı size iletilir. Bu da muazzam bir hız farkı doğurur.
ASp.Net MVC yapısından bir talepte bulunduğumuz zaman Controller içindeki Action çağrılır ve Action istediği sonucu istediği View parçasını geri döndürebilir. Sunucu da fiziksel olarak bir sayfa yapısı olmadı içinde esnekliğin yanı sıra güvenlik de sağlar.
Ayrıca bir Controllerın varsayılan actionı yerine istediğimiz bir actionı istediğimiz bir isimle çağırabiliriz.
Varsayılan olarak RouteConfig içinde aşağıdaki ifade vardır. Bunun anlamı Home kontrolü içindeki Index actionı yükler.
Ancak biz istersek aşağıdaki gibi değiştirebiliriz. Bunun anlamı yuksel1 yazdığımız zaman(http://localhost ifadesinden sonra) direk olarak oku içindeki Index sayfasını karşımıza getirecektir.
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "User", action = "Index", id = UrlParameter.Optional }
);
}
}
MVC içinde bu zamana kadar Route özeliği varsayılan olarak "{controller}/{action}/{id}" şeklinde çalışmaktadır. Yani sayfa isteğinde bulunduğumuzda kontroller tarafından yapılacak iş en kısa yoldan yönlendirilmektedir.
Aynı olay MVC5de de devam etmektedir. Bu yapıyı istediğimiz gibi düzenleyebilir ve çoğaltabiliriz.
MVC 5de gelen yenilik ise bunu Actiona göre tanımlayabiliyoruz. Yani her Action için ayrı bir Route yapısı tanımlamak mümkündür. Yani Home klasörü altında bulunan bir sayfaya yüksel yazarak ulaşabilirim. Veya Home/Adres klasörü yerine Kavun/Karpuz yazarak da ulaşabiliriz. Bir nevi gerçek yolu da gizlemiş oluyoruz.
72) Bir önceki uygulamamızdan devam ediyoruz. RouteCongif.cs dosyasına aşağıda büyük harfle yazılmış ifadeyi ekliyoruz .Bu ifade; map yapmak için gerekli bir yapıdır.
73) HomeController.cs dosyasını açarak Welcome ve zaman actionlarının başında Route ifadesini aşağıdaki gibi ekliyoruz.
74) Sayfayı yükleyip bu projemize geçip kavun ve karpuz yazarak olayları gözlemleyebiliriz.
Aynı zamanda linkten seçtiğimi de de gerçek yolu yerine kavun veya karpuz yazacaktır.
75) Peki bunu Home için nasıl yapacağız. Erik yazınca bu sayfa gelsin.
76) Bunun için Index Action yapısını aşağıdaki gibi yapılandırırız.
77) Eğer baştan beri aynı proje içinde iseniz o zaman index.aspx sayfasında en son HyperTextin özelliklerinden Url kısmındaki home ifadesini erik ile değiştiririz.
78) Ben parametreyi RouteConfig içinden yollamayacağım. Bunun yerine daha kullanışlı bir yapı oluşturacağım. Bunun için eğer veri tabanlı bir projede çalışmıyorsanız ilk yaptığımız User yapısındaki projenizi açınız. Ardından Controllers klasörü içindeki UsersController.cs dosyasını açarak hemen başa aşağıdaki ifadeyi ekleyiniz.
79) Ardından Users klasörü üzerinde sağ tuşa basarak Add View seçeneğine tıklayalım. Ve aşağıdaki gibi yapılandırarak ekleyelim.
80) Oluşan yeni View içindeki kodlar şekildeki gibidir.
81) Projeyi yükleyerek http://localhost:numaraneyse/users/kaynoyaz/2 dediğimiz zaman 2 numaralı kayıt karşımıza gelecektir.
82) Yalnız olmayan bir numara girince sayfa çakılacaktır. Bunu önlemek için kaynoyaz.html sayfasının sonunu aşağıdaki gibi değiştirelim.
Yukarıda isterseniz bir hata sayfası oluşturarak için istediğinizi yazabilirsiniz ve hata durumunda bu sayfaya yönlendirirsiniz.
83) Daha kullanışlı bir hale getirmek için index.aspx sayfamıza bir TextBox koyarak AutoPostBack özelliğini True yapalım ve şekildeki gibi yapılandıralım.
84) TextBox1_TextChanged olayına aşağıdaki kodları yazarak çalıştıralım.
Eğer olmayan bir kayıt numarası girdiğiniz zaman yukardaki değerler boş gelecektir.
85) Şimdi başka bir özel sorgulama yapalım ancak başlamadan önce yukardaki örnekle bağlantılı bir şey yapalım. Dedik ki birden fazla route ve bir isim vererek hem yol gizlenebilir hem de esneklik sağlanabilir. Bunu görmek için RouteConfig.cs dosyası içinde varsayılan Route tanımlamasının üstüne aşağıdaki ifadeyi ilave edelim.(ALTINA OLMAZ!)
Yani son görüntü şekildeki gibi olmalı.
86) Uygulamayı çalıştırıp http://localhost:numara/yuksel1 yazdığımız zaman 2 numaralı kayıt karşımıza gelecektir.
87) Aşağıdaki yazılımları kullanarak bir URL sayfasına link verebiliriz._HomeLayout sayfasına ilave edebiliriz.
<li><a href="http://microsoft.com">Microsoft Sayfası</a></li>
Veya
<li><input id="Button1" type="button" value="Microsoft" onclick="hh()" /></li>
Ancak ikinci satırı kullanacaksak; hh scriptini aşağıdaki gibi tanımlamamız gerekir.
<script type="text/javascript">
function hh()
{
window.open("http://microsoft.com");
}
</script>
Çalıştırdığımızda görüntü şekildeki gibi olacaktır.
Bir önceki genel uygulamamızda değindiğimiz veri tabanı yapısını şimdi daha detaylı ve tane tane imceleyelim. Burada yapacağımız uygulama ile Model ve Controller yapısının işleyeni daha iyi anlayacağınızı umuyorum.
1) ders4 adı ile yeni bir Empty MVC 5 uygulaması oluşturalım.
2) Model klasörü içinde eleman isimli bir class oluşturalım.
3) İçindeki kodlar aşağıdaki gibi olsun.
4) Controller klasörü içinde elemanlarController isimli boş bir kontrol oluşturalım.
5) İçinde ViewGetir isimli Actionı aşağıdaki gibi oluşturalım.
En üste modelimi belirtmek için aşağıdaki using ifadesini koyuyoruz.
6) Blok içinde sağ tuşa basarak BenimView isimli bir View oluşturalım.
7) Bunun sonucunda BenimView şeklideki gibi oluşacaktır.
İçini aşağıdaki gibi yapılandıralım.
8) RouteConfig dosyasını aşağıdaki gibi yapılandıralım ve sayfayı yükleyelim.
Sayfayı yüklediğimizde görüntü şekildeki gibi olacaktır.
9) Eğer kuruş hanesi istemiyorsanız ve $ işareti çıkmasını istiyorsanız BenimView.cshtm dosyasında fiyat satırını aşağıdaki gibi değiştirmeniz gerekir.
Bu uygulamada ViewBag kullanarak Model içindeki bilgileri View içine yolladık.
10) Şimdi koşul koyalım. Eğer Maaş 15000 den büyükse zemin rengi sarı değilse yeşil olsun. Bunun için BenimView.cshtm dosyasında aşağıdaki satırı iptal ediyoruz.
Onun yerine aşağıdaki satırları koyuyoruz.
11) Çalıştırarak sonucu görelim.
12) Birde 10000 yaparak deneyelim.
Esasında bu yapıyı önceki uygulamalarımızda yaptık. Code ile veri tabanını tanımladık. Daha sonra Context yardımı ile ilişkiye geçtik ve veri alışverişi sağladık. Şimdi grafiksel olarak daha kısa yoldan aynı işlemi yapmaya çalışacağız.
Ben ders4 uygulamasından devam ediyorum, isterseniz yeni bir uygulama açabilirsiniz.
13) Model üzerinde sağ tuşa basarak ADO.NET Entity Data Model seçimini yapalım.
14) İsmine s diyelim.
15) Empty Code First model seçimi yapalım.
16) En alta inerek aşağıdaki kodları yazalım.
Projemizi derleyelim .
17) Controller üzerinde sağ tuşa barak Add /Controller seçimi yapalım. Ardından şekildeki seçimi yapalım.
18) Üst kısımdan Modelimizi seçelim. Şekildeki gibi yapılandıralım. Dikkat edin bir Context yazmadık.
Bu işlem sonucunda PersonelsController ve bununla ilişkili Viewlar otomatik oluşacaktır.
19) RouteConfig.cs dosyamızı aşağıdaki gibi değiştirelim.
20) Çalıştırdığımızda şekildeki gibi ilk ekran gelecektir. Şimdi kayıt girebiliriz.
21) Web.config dosyasına da veri tabanı ile ilgili kodu otomatik olarak yazmıştır.
22) Daha önceki yazdıklarımızda olsun bu örneğimizde olsun başlıkları istediğimiz gibi değiştirmek içim model dosyamızı açarak aşağıdaki gibi yapılandıralım.
İlk olarak en üste aşağıdaki namespace yapısını ilave edelim;
using System.ComponentModel.DataAnnotations; //Ekledik
23) Çalıştırdığımızda görüntü şekildeki gibi olacaktır.
Tabii bu özellik her yere yansıyacaktır;
24) Bu tanımladığımız tablo içeriği otomatik olarak oluşmuştur ve karekter değerlerini de nvarchar(MAX) oalrak algılamıştır. Bu ilerde göreceğimiz validatorlar için sorun çıkartabilir. Şimdi oluşturacağımız model de veri tipini belirleyelim.
25) s2.cs isimli Class dosyamızı ADO.NET Entity Data Model seçimi yaparak oluşturalım.
26) İçini aşağıdaki yapılandıralım. Dikkat ederseniz sütunların veri tiplerini de belirliyoruz.
En üste aşağıdaki namespace yapılarını ekleyelim;
using System.ComponentModel.DataAnnotations; //Başlıklar için
using System.ComponentModel.DataAnnotations.Schema; //Veri tipleri için
İstersek classın hemen üstüne aşağıdaki ifadeyi ekleyerek tablonun sahipliğini de belirleyebiliriz.
[Table("Personel2", Schema = "dbo")]
27) Projemizi derledikten sonra, bu modeli kullanarak bir Personel2sControllerı oluşturalım.
28) RouteConfig.cs dosyasını aşağıdaki gibi yapılandıralım.
29) Artık projemizi çalıştırarak test edebiliriz.
30) Kayıt girelim.
31) Kurala uymayan kayıt girelim.
32) Eğer buradaki mesajları Türkçeleştirmek isterseniz kodları aşağıdaki gibi değiştirmeniz gerekir.
33) Çalıştırıp test ettiğinizde görüntü şekildeki gibi olacaktır.
34) Tabloyu incelediğinizde MAX ifadesi yerine sayısal uzunluk değerlerinin geldiğini göreceksiniz.
Şimdi ise oluşturulmuş bir veri tabanı ile ilişkiye geçeceğiz. Bunun için ilk oalrak bir veri tabanı oluşturalım. Yine bir önceki uygulamamdan devam ediyorum ancak isterseniz yeni bir uygulama açabilirsiniz.
35) App_Data üzerinde sağ tuşa basarak Add/New Item seçimi yapalım.
36) SQL Server Database seçimi yaparak ismine ankara.mdf diyerek onaylayalım.
37) App_Data altındaki ankara.mdf dosyasının üstüne iki kez tıkladığımızda Server Explorer penceresi açılacak ve görüntü şekildeki gibi olacaktır. Burada Tables klasörü üzerinde sağ tuşa basarak Add New Tables seçimi yapalım.
38) İlk iş olarak alt kısımda görülen ID tanımlamasına bir identity ilave ediyorum. Bunun anlamı Id numarasını otomatik oalrak kendi üretiecek.1den başlayacak 1er 1er artacak.
39) Tablomu şekildeki gibi yapılandırıyorum. Alttaki T-SQL kısmında ismini Sicil yapıyorum.
40) Update ve UpdateDatabase butonu ile tablomu oluşturuyorum.
Girmek zorunda olmamama rağmen aşağıdaki örnek kayıtları giriyorum.
41) Model klasörü üzerinde sağ tuşa basarak Add/ADO.NET Entity Data Model seçimi yapıyoruz.
42) İsmine Persicil diyoruz.
43) Code First from Database seçimi yapıyoruz.
44) Next butonuna bastıktan sonra Listeden ankara.mdf seçimi yapıyoruz. Dikkat ederseniz web.config içine yazılacak ifadeler de otomatik olarak aşağı kısımda göründü. Tekrar Next butonuna basıyoruz.
45) Tablomuzu seçerek Finish ile sonlandırıyoruz.
46) Projemizi derledikten sonra, bu modeli kullanarak PersicilsController oluşturalım.
47) RouteConfig.cs dosyasında controller kısmını Sicils olarak değiştirelim.
48) Projemizi çalıştırdığımızda ilk gelen ekranda girmiş olduğumuz kayıtlar şekildeki gibi listelenecektir. Bizde yeni kayıtlar girebilir değişiklik silme yapabiliriz.