Asp.net Custom Server Controls (Özelleştirilmiş Kontroller)

             Merhabalar bugünkü makalemizde asp.net ile özel kontroller geliştirme konusuna göz atıp örnek bir de uygulama yapıyor olacağız.
    Öncelikle Custom Server Control nedir  ? Custom Server Controls  ya da tükçe olarak Özel Server Kontrolleri  kimi zaman ücretsiz kimi zaman da ücretli olarak temin ettiğimiz   asp.net in kendi kontrollerinden daha gelişmiş kontrollerdir başka bir değişle asp.net in kendi kontrolleri  ile yapılamayan ya da  çok zor yapılabilen işlemleri kolaylıkla yapılabilmesini sağlayan kontrollerdir.  Örnek vermek gerekirse  ücretsiz   olan ve işimizi zaman zaman kolaylaştıran   ajax control toolkit  içerisindeki kontroller bir çeşit cunstom controldür.  Şimdi biz de örnek olması açısından  basit  bir custom control geliştirip onu kullanacağız.  Akılama gelmişken şunu da söyleyelim Custom Controllerin User Control erden farkı user controller projeye özel olup başka bi projeye taşınmak istedğinde kaynak kodları ve kullancı arayüzü  olan html (ascx, ve asxc.cs) dosyasının elle kopyalanıp taşınması gerekir .Custom Controller ise bir kere hazırlanıp derlendikten sonra dll e çevrilip istenilen projeye o dll referans edilip hemen kullanılmaya başlanabilir.
    Gelelim Örneğimize. Örnek olarak özel bir textbox geliştireceğiz. Bu özel textboxın normal textbox dan farkı ise sayfaya sürükletip bıraktığımız zaman yanında RequiredFieldValidator ile beraber gelecek ve biz textboxı sayfafıma eklediğimizde textboxımızın id,runat,cssclass gibi özelliklerinin yanında ayrıca ErrMsg gibi bi özelliği olacak ve sayfa postback olduğu zaman custom texboxımız boş ise yanında otomatik ErrMsg a verğimiz metin çıkacak ErrMsg e değer vermediysek varsayılan olarak verdiğimiz metin uyarı olarak  çıkacak ve sayfa postback olmayacak.
Normal şartlarda bunun için bir textbox ın yanna ayrıca bir  de RequiredFieldValidator sürükleyip   sonra da bu RequiredFieldValidator ın ControlToValidate özelliğine bağlı olduğu textboxın ID sini söylememiz  sonra da ErrorMessage değerini vermemiz gerekirdi.

 ilk olarak bir asp.net projesi oluşturuyoruz ve sonra Solution içne yeni bi Class Library projesi ekleyelim. Class Libarary içindeki ilk oluşan clası silip kedimiz adını ilTextBox yapıyoruz. Yani özel texboxımız adı TextBox değil  ilTextBox olacak (   il adımın ilk 2 harfi tabi  ) ve koldarımız.
Buaradaki temel mantık Controllerin server tarafında oluşurken controllerin html ye dönüşene kadarki belli evrelerde yani conttlerin  Life Cycle ında arala girip conrollerin methodlarını override etmek yani tekrar yazmak.

Artık kodlara geçelip;
ilTextBox Classı
 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace MyControls
{
   [ToolboxData("<{0}:ilTextBox runat=\"server\"></{0}:ilTextBox>")] // contolümüzün TooBax da ki adı be sayfadaki html görünümü
   public  class ilTextBox : TextBox // Burası önemli, nesnemiz TexyBoxdan türeyecek böylece textboxun tüm özelliklerine sahip olacak
    {
        private RequiredFieldValidator reg = new RequiredFieldValidator(); // yeeni bir RequiredFieldValidator örneği oluşturuyoruz
        private string _ErrMsg; // Dışarıdan set edilecek olan hata mesajımız
        public string ErrMsg 
        { 
            get { return _ErrMsg; }
            set { _ErrMsg = value; }
        }
        public ilTextBox()
        {           
            ErrMsg = "Boş Geçilemez !"; // Eğer Hata mesjı htmk içerinden belirtilmediyse var sayılan olarak yazacak olan metin
        }
      
        protected override void OnInit(EventArgs e)// kontololümüz oluşruken  aşağıdakileri yapıyoruz
        {
            reg.ControlToValidate = this.ID; // RequiredFieldValidator ControlToValidate değerine özel textbox ımın ID sini otomatik veriyoruz
            reg.ErrorMessage = this.ErrMsg; // aynı şekilde hata mesajımızı da ErrorMessage a set ediyoruz
            Controls.Add(reg); // ve Validator control collectionınların içine ekliyoruz 
            base.OnInit(e); // base olan nesnemizi oluşturuyoruz yani TextBox ı
        }
        protected override void Render(System.Web.UI.HtmlTextWriter writer) // Render Merhodu  asp.net contollerinin html e dönüşdüğü anda çalışan  method 
        {
            base.Render(writer);// base yani textboxu render ediyoruz
            reg.RenderControl(writer); // textbox dan sonra da Validator ımızı render ediyoruz.
        }
    }
}

Artık proyei Build edelim ve dll mizi kullanmaya geçelim oluşan dll  Class Library deki
 bin->debug-> MyControls.dll  dizinde olacaktır .

Şimdi de asp.net projesinde soldaki toolbox a yeni bi tab ekleyelim ev üzerinde sağ tıklayıp choose items diyelim ve oluşan dll mizi seçelim. Aynı ajax controllerini ekler gibi.Sonra web.config e ağaşıdaki eklemeyi yapalım böylece sayfamıza eklediğimiz özel kontorlümüz nereyi referans alacağını hangi tagPrefix i kullancağını bilsin, bu işlemi sayfanın başında da yapabilirdik ama ben böyle tercih ediyorum.

web.config

<system.web> altındaki page -> <controls> altıa ağaıdaki eklemeyi yapalım.

  <add tagPrefix="ic" namespace="MyControls" assembly="MyControls"/>

 burda ic ilhancontrol gelen bi kısaltma 



Artık sayfamısız içerisine bu Özel kontolü sürükleyip bırakarak kullanbilriz.
Özel textBox ın html Source görünümü  şağaıdaki gibi olacaktır.

<ic:ilTextBox ID="ilTextBox1" runat="server"></ic:ilTextBox>


html içinden ya da design görünümde Properies pencerinden ErrMsg değerine değiştirini değiştirip boş olamsı durumunda başka bi uyarı vermsini sağlayabiliriz. 
Artık sayfamıza bir asp buton bırakıp  sayayı postback ettirip test edebiliriz.

Bunu beğen
Paylaş

Yorumlar
Yorum Yaz
İsim : (*)
E-mail :
Web Adresi:
:
(*)
 
Kapat