Asp.net mvc uygulamalarında view tarafında kullanılmak üzere kendi özel extension metodlarımızı oluşturabiliriz. Oluşturduğumuz extension metodları da mevcut Html helper tipine bağlayarak rahatlıkla kullanabiliriz.
Html helper tipinde mevcut extension metodlar Action, ActionLink, Label,… şeklinde devam etmektedir. Asp.net mvc takımı, genel ihtiyaçları karşılamak için bu metodları oluşturmuştur. Tüm ihtiyaçlara karşılık verecek metodları da oluşturup sisteme dahil etmeleri de anlamsız ve büyük bir yüktür zaten. İhtiyacımız olan tipleri kendimiz geliştirebilmemiz için bize açık kapı bırakılmıştır.
Bizde bu kapıdan girerek kendi image extension metodumuzu Html helper tipine dahil edelim.
Extension metodlar, statik bir sınıf içerisine statik metodlar halinde tanımlanırlar. Biz de bu şartlara göre Image metodumuzu oluşturabiliriz.
public static class ImageHelper { public static MvcHtmlString Image(this HtmlHelper helper, string imageUrl, string altTag) { TagBuilder tag = new TagBuilder("img"); tag.MergeAttribute("src", imageUrl); tag.MergeAttribute("alt", altTag); return MvcHtmlString.Create(tag.ToString()); } }
Artık bu sınıfı view tarafına gösterdiğimizde, @Html.Image(“”,””) şeklinde kullanabiliriz. O halde ImageHelper sınıfını view tarafına nasıl göstereceğimizi inceleyelim.
1.Yol
View sayfasının içerisinde using keywordu ile sınıfın bulunduğu dizini göstermek. View sayfasının en üstüne @using MyProject.Helpers kodunu yapıştırarak extension metodu kullanmaya başlayabiliriz.
2.Yol
Solution penceresinde ASP.NET MVC projemizin Views dizinindeki web.config dosyası içerisindeki <system.web.webPages.razor> içerisindeki <namespaces> düğümüne ekleyebiliriz.
<namespaces> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Routing" /> <add namespace="MyProject.Helpers" /> </namespaces>
Bu yöntemi uyguladığımızda ilk etapta kodun kullanımı sırasında, extension metodumuzun altını kırmızı olarak çizebilir. Ancak kod çalışır. Eğer visual studio restart edilirse artık extension metodun altı çizilmeyecektir. Bu sorun intellisense tarafına kodumuzun web.config tarafından dahil olamadığındn kaynaklanıyor.
Kodun kullanımı:
@Html.Image(“../Content/Images/flower.jpg”,”flower”)
Sonuç: