
Merhaba Türkhacteam Ailesi büğün sizlere ASP:NET Web User Kontrolü Nedir ? Nasıl Yapıldığından bahsedeceğim.

Web Custom Controller ve Web User Controller aslında aynı işi yaparlar. Yani hazırladığımız bir templete'i component biçiminde eklememizi sağlarlar. Bu tanımlama çok çok kaba olduğu halde en azından haklarında bir fikir vermesi için kullandığım ve hataları olan bir tanımlama. Şiimdi dilerseniz kitap tarifleri diyebileceğimiz tanımlamalarını yazalım ...
Web User Control :
Daha daha önceden varolan bazı sunucu ve HTML componentlerini kullanarak yeni bir görünüş yapmamıza faydalarç Bunu VS.NET ile yapabilrsiniz. Yaptığımız bu controller .ascx dosyalarında saklanır ve nerede kullanmak istiyorsak orada sayfaya import etmemiz gereklidir.
Web Custom Control : 2 biçimde kısacasımemiz mümkün. Ve bunlar bir dahaki hafta anlatılacaktırlar.
Bunlar Composite Custom Controller ve Rendered Custom Controllerdir.
1 - Composite Custom Controller : İsmininden de anlaşılacağı gibi(ingilizce bilenler için) composite yani birleştirilmiş componentlerdir. Yani önceden var olan bazı sunucu ve HTML componentleri kullanarak yeni bir görünüm yaratmak için oluşturulan componentlerdir.
2 - Rendered Custom Controller : Yani HTML yazılarak ortaya menfaatilan yeni componentlerdir. Ilkinden farkı direk HTML yazılması temeline dayanmasıdırç İlkinde ki gibi önceden varolan componentleri kullanmak yerine direk HML output biçiminde yapılmasıdır.
1 - WEB USER CONTROL :
Web User Controlleri bir nevi ASP deki include filelar gibi düşünebilirsiniz. Oluşturduğunuz bir Web User Controlü sayfanızın talebiniz yerine koyar ve orada onun görünmesini sağlayabilirsiniz. Tabii bunu yaparken ASP deki gibi include tarzı bir deyim kullanmayız. Onun yerine Prefix tanımlaması yaparız. Neyse fazla aceleci davranmadan basmak basmak konumuzu prosedüreye başlayalım.
1.1 Özellikleri :
Web user controller proje içerisinde yaratılan ascx dosyalarıdır. Bu dosyalar içerisinde önceden var olan HTML ve sunucu componentlerini istediğimiz gibi kullanarak yeni bir görünüm oluştururuz. Web User Controller kullanıldıkları her proje içerisinde kesinlikle bulunmalıdırlar. Bunun nendeni ise onları compile edememizdir. Yani Web User Controlleri derleyerek bir dll yapıp bunu istediğimiz projede kullanam imkanımız yoktur. Sadece ASP'deki include dosyaları gibi kullanmak mümkünler. User Controller VS.NET toolbox ında yani araç çubuğunda bulunmazlar. Onları herhangi bir projeye eklemek için Solution Explorer dan o ascx dosyasını tutarak sayfada istediğiniz yere bırakmanız gereklidir. User Control kodları ise Web Formumuz Load edildikten sonra yüklenir. Bu şu demektir. Page_Load eventi User Controlümüzün yuklenmesinden önce gerçekleşmektedir. Bu sayade gerekli loadingleri o kısımda yapabiliriz. Bu saydıkarım .NET diğer componentlerde olmayan özelliklerdir. Bu nendenle ne olursa olsun Web User Controlleri .NET'in diğer kontrollerine benzetmeyiniz. (örn. Windows Controller ve Web Custom Controller gibi ...)
1.2 Yeni bir Web User Control Oluşturma
VS.NET editöründe Solution Explorer da projeye sağ kliklayınız ve Add New Item opsiyonuni seçin. Buarad açılan pencereden Web USer Controlü seçip yeni adını verin ve okey deyin. Bolelikle yeni bir ascx dosyası Projenize eklenmiş olacaktır. Şimdi peki ne yapacağız.
Yapacağımız şey bu controlun içinde barındırmasını istediğimiz biçimde tasarlamak. Örneğin sizin bir menünüz var ve bu menü aşağı yukarı her sayfanızda kullanılıyor. Ve bu menude bazı durumlarda değişiklikler yapmanız gerekecek bu durumda her sayfada bu işi ayrı ayrı yapmak yerine tek bir menü sayfası oluşturup bunu her sayfada kullanamk daha mantıklı olacaktır.
Şimdi bu menu örneği hakkında hemen şu şekilde bir şey yapabiliriz. Bir ascx dosyası olusturup bu dosyanın içerisine menu kodumuzu yazarız. Örneğin:
HTML:
<table cellpadding=0 cellspacing = 0 border=0 class=yazi>
<tr>
<td><a href="">Link 1</a></td>
</tr>
<tr>
<td><a href="">Link 2</a></td>
</tr>
</table>
gibi bir kodu bu sayfamıza yazarız. Daha sonra yapmamız gereken tek şey bunu drag drop'la yani tutup bırakma ile rastgele bir sayfamızın istediğimiz yerine koyma şansımız olacaktır. Böylece bu dosyada yapacağımız bir değişiklik diğer tüm sayfalarıda etkileyecektir. Tabii bu çok kolay bir örnek oldu ve yalnızca asp de kullandığımız mantığın benzerini kullandık ve birde sadeceHTML kullandık. Şimdi daha karmaşık bir örnek yapalım. Örneğin yeni bir Web User Control dosyası oluşturalım ve buna Login.ascx adını verelim. Bu dosya içerisinede bir login form koyalım. Bunun için şöyle kod yazmamız yeterlidir.
HTML:
<DIV id=maxilogin align=center>
Kullanıcı Adı : <asp:TextBox id=username Runat="sunucu"/><asp:TextBox>
Şifre : <asp:TextBox id=passWord Runat="sunucu"></asp:TextBox>
<asp:Button id=login Runat="sunucu" Text="GIR"></asp:Button><br>
<asp:Label id=sonuc runat=sunucu></asp:Label>
</DIV>

Burda elimizde iki textbox'ımız var ve bunların birisi kullanıcı adı ve diğeride şifre için ve birde düğmesi var. Bu bize kolay bir kullanıcı adı ve şifre isteyen form örneği.
1.3 Web User Control Methodları, Eventleri ve Property lerini ayarlama
Şimdi buraya kadar kolay bir login form taşıyan bir User Control yaptık. Bu denetimimüz şu anda bile kullanılmaya hazır ancak biz işleri biraz daha ileri yürütüp işimize daha fazla yarayacak hale getireceğiz. Bunun içinde metodları eventleri ve propertyleri kullanacağız. İşte dilerseniz propertylei ile başlayalım. Hepiniz bilirsiniz herhangi bir denetimi internet formumuza eklediğimizde yanda property dialoğunda onun propertyleri çıkar. Mesela asp:button için Text, Runat gibi birçok property çıkar. Şimdi bizim bu denetimimüz içinde gerekli property ayarlamaları yapacağız. Bu propetyler bize design esnasında ve RunTimeda birçok basitlık sağlayacak. Aynı zamanda tek kalıp değilde farklı bir görünüm yada kullanım için gerekmektedir.
Şimdi oluşturduğumuz bu Web User Control ün code görünümüde (C# ya da VB.NET) bakalım. Ben herzamnki gibi yalnızca C# kullanımını göstereceğim. VB.NET kullanmak isteyen arkadaşlar kendileri bu kodları uyarlasınlar.
Controlümüzün classına dikkat edecek olursak şöyle kaydedilmiş olduğunu farkederiz
Public Abstract Class Login : System.Web.UI.UserControl
Şimdi bunun neresine dikkat edeceğiz ki diyeceksiniz. Birincisi clasımızın bir abstract class olması. Bu şu demektir. User Controller classı yalnızca bu ortaya çıkan yeni class için yani Web Forma koyacağımız controlümüz için temel yani Base classdır. Bir diğer önemli nokta ise : System.Web.UI.UserControl kısmıdır ki buda bu yeni oluşturduğumuz controlümüz System.Web.UI.UserControl namespace'i temel alır. Yani yeni controlümüzü yaratmakta kullanacağımız ve yine HTML atrribularından propertylerini alacağımız temel methodlar ve property'ler bu classda bulunur.
Yukarıdakiler haricinde code görünümde birde Page_Load eventini göreceğiz ki hatırlayalım bu event Windows Formsun Page_Loisminden daha sonra gercekleşecektir...
Şimdi bu code'ların arasına kendi propertylerimizi yazalım. Tabii bunu yaparken dikkat etmemiz gereken husular var. Bunlar; propertyleri public olarak tanımlayalım ki dışarıdan erişime izin verilsin. Ve yine design time da yani VS.NET te bu componentin propertyleri değiştğinde bunları yeni dşayetlerinin saklı tuulması ve buna göre görünümün tekrar oluşturulması için ise ViewState deyimini kullanmak. Şimdi yukarıyada yaptığımız örnek için hemen bir property tanımlaması yapalım. Bu property miz mesela Site adı olsun. Ve burada hangi sitede kullanıyorsak o ayarlansın.


JavaScript:
public string SiteAdi
{
get {return Convert.ToString(ViewState["SiteAdil"]);}
set {ViewState["SiteAdi"] = value;}
}
Buarada Kullanici adı isimli bır property tanımladık. Şimdi nedir bu ViewState kardeşim deme hakkınız varmı yok mu? Bence var. View State bir dictinory dir ve içerisine yazdığınız key'e bağlı olarak içeriisnde o controlünüz için gerekli propertyleri tutar. Örneğin burada biz Site adı diye bir property tanımladık ve bunun dayetinide ViewState te yine "SiteAdi" keyini kullanarak tuttuk. Bu sayede bu oluşturduğumuz controlün propertyleri ViewState te tutulur. Daha sonra istediğimiz herhangi bir anda onu kullanırız.
Bu property benim ne işime yarayacak diyorsunuz aslında bu örnekte pek olağan üstü kullanımları olamayacak ancak yinede kullanacağız. Ancak siz ileride işinize daha fazla yarayan hatta hayati önem taşıyan propertyler kullanmak zorunda kalacaksınız ... Buna garanti verebilirim ...
Propertyleri bu yolla tanımladığımıza göre şimdi sıra Eventlerimizi kullanamaya geldi. Yukaridaki örnekte koydugumuz düğmea çift tıklayın ve oluşan evetin içerisine şu kodları yazalım..
JavaScript:
private **** Button1_Click(object sender, System.EventArgs e)
{
if(this.username.Text != "kuti" || this.passWord.Text != "kuti")
{
this.Label1.Text = "Hata VAR";
} else{
this.KullaniciAdi = username.Text;
this.Label1.Text = "Merhaba " + this.username.Text + ". " + this.SiteAdi + " sitesine güzel geldiniz.";
}
}
burada da görüldüğü gibi gelen UserName ve PassWord yani kullanıcı adını ve şifreyi kontrol ediyoruz ve şayet ikiside kuti değilse demekki hatalı diyoruz ve Labelımıza hata var yazdırıyoruz. Eğer username ve şifre doğru ise bu kez ismi ile hitap ederke merhaba kuti diyerek Property olarak yaptığımız SiteAdi ni kullanarak şu siteye Hoşgeldiniz diyoruz. Bütün bunları düğme clicklendiğinde yapıyoruz. Şidmi buraya kadar nasıl yazılacağı ve nasıl kullanılacağına bir örnekleme yaptık Web User Controlleri için. Şimdi bu örneğimizi herhangi bir Web Forma nasıl adapte edeceğiz yada Propertyleri nasıl ayarlayacağız ona bakalım dilerseniz.
Herhangi bir User Controlü kullanabilemek için sayfanıza Register edilmesi gerekir. Bunun için bu Web User Controlü tutup sayfada kullanmak istediğiniz yere bırakmanız yeterli olacaktır. VS.NET sisizn yerinize Register prosedürünü yapacaktır. Ama siz manuel yani elle kendiniz yapmak isterseniz ozaman kodu kendiniz yazmalısınız. Register kodu aşağıdaki gibi dir.
JavaScript:
<%@ Register TagPrefix="KUTI" TagName="Login" Src="Login.ascx" % >
Bu aradaki KUTI sayfadaki Prefix'dir. Tag name ise bunun için kullanılacak isim ve son olarak'da kaynak dosyası yanı ascx dosyamız verilmektedir.
Şimdi buna göre sayfamızda bunu şöyle kullanabiliriz..
JavaScript:
<KUTI:Login Runat="Server" id="Login1" SiteAdi="maxiasp.net"></KUTI:Login>
Bu arada yöntem şu şekildedir ;
HTML:
<TagPrefix:TagName .... Propertyler ... ve son.
Default TagPrefic uc1 şeklinddir. Yani siz drag dropla sayfaya bıraktığınızda default olarak kendisi uc1 diye bir TagPrefic oluşturur.
Şimdi bu sayfa çalışırsa ortaya şöyle bir şey çıkar. Eğer kullanıcı adı ve şifre kuti olarak girilmezse alttaki Labela HATA VARRRRRR... yazdırır. Eğer doğru girerse o takdirde de Merhaba kuti maxiasp.net'e Hoşgeldiniz yazacaktır.
Şimdi dilerseniz Event yapalım. Yani bu denetimimüz için bir event tanımlayalım. Şimdi bildiğiniz gibi Eventlerin Argumalnları vardır. Bu arguman event sonucu taşınmasını istediğimiz degerleirn oluşturduğu objedir. Bizde bu controlümüz için bir event yapalım ve bu event login eventi olsun. Yani kullanıcı doğru şifre kullanıcı adı yazarsak bu eventimiz oluşsun ve taşıyacağı argumanlarda kullanıcı adı ve şifre olsun.
Önce bir argüman clası tanımlayalım...
JavaScript:
public class Login_EventArgs
{
private string _Kullanici = "";
private string _Sifre = "";
public string Kullanici
{
get {return _Kullanici;}
}
public string SifreÂ
{
get {return _Sifre;}
}
public Login_EventArgs(strıng kullanici, string sifre)
{
_Kullanici = kullanici;
_Sifre = sifre;
}
}
Şimdi sıra bu eventi yakalayacak handlerı tanımlamakta. Onuda şöyle yapabiliriz.
JavaScript:
public delegate **** LoginEventHandler(object sender, Login_EventArgs e);
burada delegate'i yapıyoruz ve bu delegate'in taşıyacağı dişayetleri belirtiyoruz.
Şimdi codumuz'un içerisine yani yukarıyada yaptığımız örnek kodun içerisine event tanımlama prosedürünü yapalım..
JavaScript:
public event LoginEventHandler Login = null;
şimdi oluşturduğumuz bu Login eventini ortaya çıkarmamız gerekecek....
JavaScript:
private **** Button1_Click(object sender, System.EventArgs e)
{
if(this.username.Text != "kuti" || this.passWord.Text != "kuti")
{
this.Label1.Text = "Hata VAR";
} else{
if(this.Login != null)
{
Login_EventArgs arg = new LoginEventArgs(username.Text, passWord.Text);
this.Login(this, arg);
}
}
}
Burada Login eventini ortaya menfaatiliyoruz. Şimdi burada dikkat ederseniz Login eventini null yaptım tanımlarken ve daha sonrada ortaya çıkarma esnasında kontrol ettim şayet null'sa hiç bir prosedür yapma diye. Bunun nedeni şayet event kullaılmak istenmiyorsa yani hernagi bir functiona atanmamısa prosedür yapmamak. Şimdi buraya kadar heralde anladık. Sıra geldi bu eventi kodumuzda yani Web Formumuzun kodunda yakalama...
Şimdi bunun için önce Web Formumuzda bu event oluştuğunda hangi function çağrılacaksa o oluşturulmalı.
JavaScript:
Login1.Login += new LoginEventHandler(this.Login_LoginEvent);
// burada Login eventi olustugunda direk Login_LoginEvent functinına yonlendirdik ...
Şimdi ilk önce dikkat ederseniz functıonım delegate ettiğim LoginEventHAndlerı ile aynı yapıda...
Bu arada'da Response.Write kullanılarak yazdırıyoruz merhabay'ı.
Şidmi son basmak bu eventi atamak, onu da Windows formumuzda yapacağız yine..
Hatırlarsnız Controlümüzün adı Login1 di sayfamızda.
Kod:
=javascript]Login1.Login += new LoginEventHandler(this.Login_LoginEvent);
// burada Login eventi olustugunda direk Login_LoginEvent functinına yonlendirdik ...
Onun Login eventinide bu yolla tamamlamış olduk.
İYİ FORUMLAR DİLERİM..
Son düzenleme:






