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.