mehmetduran.com - Paylaşmak Güzeldir...
MVC ile Link İşlemleri (Html.ActionLink, Url.Action ve Özel Metot Oluşturma)
Bu yazımda MVC ile link işlemleri için kullandığımız metotları nasıl kullanacağımızdan ve kendimize özel metotları nasıl oluşturacağımızdan bahsedeceğim. Öncelikle HtmlHelper sınıfı altına yer alan taglarla beraber link üreten Html.ActionLink metodunu, daha sonra UrlHelper sınıfı altında yer alan ve sadece adres üreten (href değeri, form post adresi, vb..) Url.Action metodunu ele alacağız. Bunlar dışında kendimize özel, ihtiyaçlarımız doğrutulsunda bu metotları overload edebileceğimizi veya bu metotlar gibi başka metotları nasıl oluşturacağımıza bakacağız. Böylece MVC için Global.asax dosyamızda tanımlayacağımız Routes'lara göre (Url yapılarına) göre otomatik oluşan linklerimizi veya adreslerimizi oluşturabileceğiz. Şimdi adım adım bu işlemlere bakalım.

Öncelikle Html.ActionLink metodunu ele alalım. Bu metot ile taglarıyla beraber bütün bir link yapısı elde ediyoruz. Şimdi bu metodumuzu nasıl kullanacağımıza bakalım.

 
  <%= Html.ActionLink("Deneme", "Haber_Sayfasi", "Home") %>
  /* Metodun çıktısı : <a href="/Home/Haber_Sayfasi">Deneme</a> */
 

Html.ActionLink metodunu linkleri oluşturmak için kullanıyoruz. Bu metoda alternatif olabilecek ama sadece adres üreten Url.Action metodunu da link işlemlerinde kullanabiliriz. Ayrıca Url.Action metodunu Ajax işlemlerinde url parametresine değer verirken, form işlemlerinde formun action özelliğini belirlerken ve buna benzer ihitiyaçlarda kullanabiliriz. Şimdi de bu metodun kullanımına bakalım.

 
  <a href="<%= Url.Action("Haber_Sayfasi", "Home") %>">Deneme</a>
  /* Metodun çıktısı : /Home/Haber_Sayfasi */
 

Bu metotlar dışında link işlemleri için veya başka işlemler için kendimize özel metotlar oluşturup bu metotları kullanabiliriz. Ben basit bir örnek vereceğim ama çok karmaşık işlemlerde işleri kolaylaştırmak için metot tanımlaması yapabiliriz veya tanımlanmış olan metotları overload edebiliriz. Şimdi örnek olarak tanımladığım link ve adres üreten metotlara ve kullanımlarına bakalım.

 
  //HtmlHelper ve UrlHelper bu namespace altında olduğundan ve sayfaya ekstra namespace eklememek için bu ismi kullanıyoruz.
  namespace System.Web.Mvc
  {
    public static class Ozel_Link
    {
      // Url.Link(..) Şeklinde kullanacağımız, adres üreten metodumuz.
      public static string Link(this UrlHelper url, string Haber_Baslik, int ID, string action, string controller)
      {
        return url.Action(action + "/" + Haber_Baslik + "/" + ID, controller);
      }
 
      // Html.Link(..) Şeklinde kullanacağımız, tamamen link üreten metodumuz.
      public static string Link(this HtmlHelper html, string Text, string Haber_Baslik, int ID, string action, string controller)
      {
        return html.ActionLink(Text, action + "/" + Haber_Baslik + "/" + ID, controller);
      }
    }
  }
 
 
  // Metotların Kullanılması
 
  <a href="<%= Url.Link("Deneme", 100, "Haber_Sayfasi", "Home") %>">Deneme</a>
  /* Metodun çıktısı : /Home/Haber_Sayfasi/Deneme/100 */
 
 
  <%= Html.Link("Deneme", "Deneme", 100, "Haber_Sayfasi", "Home") %>
  /* Metodun çıktısı : <a href="/Home/Haber_Sayfasi/Deneme/100">Deneme</a> */
 

Görüldüğü gibi örneğim oldukça basit. Ancak örneği verme nedenim özel olarak metot tanımlamak ve bunu kullanmak. Bu metotları ihtiyaçlarımız doğrultusunda kolaylık sağlaması için oluşturup kullanabiliriz. İçeride dönecek olan sonuca eklemeler yapabilir veya parametre değerlerinden gelen özellikler üzerinde işlemler yapabiliriz. Sonuçta elde etmek istediğimiz bir yapı oluşturabiliriz. Yani ihtiyaç doğrultusunda bu şekilde metotlar oluşturup kullanmak mantıklı olacaktır.

Not : Html.ActionLink metodunda text değeri içinde Türkçe karakter kullanılmışsa html çıktıda Türkçe karakterler için html kod karşılıkları kullanılıyor. Bu sorunun çözümünü de bulup sizlerle paylaşmayı umuyorum.

Umarım ilgilenenlere faydası olur.

İyi Çalışmalar.
Mehmet Duran 18 Temmuz Cumartesi 2009 13 51081 4,8
Bookmark and Share
Bu Yazıyı Değerlendirin.
Konuyla İlgili Olabilecek Diğer Yazılar Tasarımda Değişiklik Asp.net MVC Cheat Sheets Sitenizi Her Konuda Test Edin LINQPad Visio için UML Sembolleri
Yorumlar
Yorum Yaz
RSS Yorum Takibi
Salih Gedik 18 Temmuz Cumartesi 2009 01:26 #1
.Net güzele benziyor yahu! paylaşım için teşekkürler
Salih 18 Temmuz Cumartesi 2009 12:09 #2
Asp.net te framework varmı? Yani PHP de nasıl code igniter, Zend vs varsa asp.net için böyle şeyler yazılmış mı?
mehmet kara 18 Temmuz Cumartesi 2009 14:11 #3
hocam verdiğin makaleler gerçekten çık faydalı umarım böyle devam edersin.yukarıda verdiğin methodları ayrı bir class da mı yazacağız yoksa başka bir yerde mi?Örneğin bir datalist içinde bu linklendirme işlemi için ID değrlerini nasıl alacağız.Daha somut bir örneği bizimle paylaşırmısın.Yardımlarınız için sonsuz teşekkürler.
Mehmet Duran 18 Temmuz Cumartesi 2009 20:27 #4
@Salih, .Net zaten bir framework ve içinde tüm konularla ilgili bileşenleri, bulabilirsin. Ayrıca kendin oluşturabilirsin veya üçüncü part bileşenleri entegere edebilirsin. Bu bakımdan .Net oldukça kullanışlı. Php hakkında çok fazla bilgim yok. Onun için karşılaştırma yapamayacağım. Ama .Net çok fazla kolaylık sağlıyor.
Mehmet Duran 18 Temmuz Cumartesi 2009 20:31 #5
@mehmet kara, Merhaba. Öncelikle teşekkür ederim. Yazdığım kodlarda zaten bir class mevcut. Bu kodları proje içinde herhangi bir kod sayfasında yazabilirsin. Veribanaı ve data kontroller ile kullanırken olduğu gibi kullanacaksın. Tek fark metotlardaki paametre değerlerini veritabanından alacaksın. Bunu da Eval("sütun_adi") şeklinde alabiliyorsun. Benim verdiğim örnekte ID sadece deneme amaçlı. Eğer oluşturacağın sistemde ID varsa bunu yine veritabanından Eval ile çekebilirsin.
salih 18 Temmuz Cumartesi 2009 21:03 #6
zaten .Net framework olarak geliyor doğru ama benim kast ettiğim PHP de CI ve Zend deki gibi yada basit olarak jQuery gibi
Mehmet Duran 18 Temmuz Cumartesi 2009 21:11 #7
.Net`te Ajax toolkit var ve bunu tıpkı Jquery gibi kullanabiliyorsun. Hatta gelişmiş uygulamaları fazla kod yazmadan yapabiliyorsun. Diğer dediğin araçları tam olarak bilmiyorum ve onun için pek açıklama yapamayacağım. :D
mehmet kara 19 Temmuz Pazar 2009 00:53 #8
hocam gerçekten çok yardımcı oldun.peki makale sayfasına geldiğimde linkteki ID`yi nasıl elde edebilirim.Querystring mantığını burda nasıl devreye sokacağım.Gerçekten minnettarız.
Mehmet Duran 19 Temmuz Pazar 2009 01:00 #9
Sevindim yardımcı olduğuna. Yazacağım konularla ilgili soruları soruyorsun hep. :D Biraz beklersen tüm konuları teker teker yazacağım. Dediğin konu ise Controller bölümü ile ilgili. Burada Querystring değeri için ilgili view için tanımladığım Controller metodunda parametre tanımlamalısın. Controller konusuyla ilgili birkaç yazımı yazmayı planlıyordum. Bunları yazdığım takdirde sorularına yanıt bulabileceksin. :D En kısa sürede yazmaya çalışacağım.
mert yalnız 19 Temmuz Pazar 2009 03:54 #10
hocam bu mvc de datagrid veya diğer data compenentlerini kullanabiliyorsak nasıl kullanırız.Kullanamıyorsak nasıl bir yol izleyelim.Kolay gele dostum.
Mehmet Duran 19 Temmuz Pazar 2009 12:07 #11
Merhaba. Data kontrollerini olduğu gibi kullanabiliyoruz. Normal Asp.net`tekinden hiçbir farkı yok.
mustafa sarp 19 Temmuz Pazar 2009 16:39 #12
hocam bu mvc de grid nasıl dolduruyoruz.Controller içindeki class da mı dolduruyoruz.Yoksa o sayfa için ayrı bir class dosyası ekleyip oradan mı dolduruyoruz. Paylaşımların gayet kaliteli ve siten de gayet kullanışlı.
Mehmet Duran 19 Temmuz Pazar 2009 16:56 #13
Merhaba. Sitem için yaptığın yoruma teşekkür ederim. MVC ile data kontrollerini yüklemek için birkaç yöntem kullanabiliriz. View`ın yani sayfanın inherit edildiği class'ı kendimiz oluşturabilir ve bu class içinde page_load eventı ile veya constructor içinde data kontrolüne datayı yükleyebiliriz. Ancak bu MVC'ye biraz ters bir yaklaşım gibi geliyor. Bunun dışında MVC'de veri taşımaya yarayan Viewdata nesnesini kullanabiliriz. Bu nesneye datatable, dataset veya her türden veriyi atıp view içinde erişebiliyoruz ve burada istediğimiz data kontrole yükleyebiliyoruz. Bu konularda yazılarımı fırsat bulduğumda en kısa zamanda yazmaya çalışacağım.
İsim :
Site :
Yorum :

Buradan bu yazıya ait yorumları RSS olarak takip edebilirsiniz.

Bu servis ile yazılara eklenen yorumları RSS ile takip ederek konu ile ilgili başkaları tarafından yapılan yorumları veya konuyla ilgili sorduğunuz sorulara verilen cevapları görebilirsiniz.
Hizmet amaçlı işler başarıya, kar amaçlı olanlar ise başarısızlığa yöneliktir.
Bölümler
Yazılar
Arşiv
Arama
Linkler
Site İçi Arama
Son Zamanlarda Ne Yapıyorum ?
İstatistikler - Araçlar - Reklam
İstatistikler
Sayaç
Mehmet Duran | mehmetduran.com | Copyright © 2009