UserControl’den Diğer Bir UserControl’e Erişmek



Bazı durumlarda sayfa üzerindeki bir UserControl’den diğer bir UserControl’e erişmemiz gerekebilir. Bu ihtiyacımızı karşılamak için UserControl’ün başına “Reference” olarak ulaşmak istediğimiz diğer UserControl’ü göstermemiz bizim için yeterli olmaktadır;

Örnek vermek gerekirse aşağıdaki gibi Control’e sahip olduğumuzu düşünelim;
  1. public partial class WebUserControl2 : System.Web.UI.UserControl  
  2. {  
  3.     protected void Page_Load(object sender, EventArgs e)  
  4.     {  
  5.           
  6.     }  
  7.   
  8.     public void BirSeyYap()  
  9.     {   
  10.           
  11.     }  
  12. }  
  13.       
Daha sonrasında ascx dosyasında Reference verildikten sonra artık diğer UserControl emrimize amade durumdadır.
  1. <%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl1.ascx.cs" Inherits="WebUserControl1" %>  
  2. <%@ Reference Control="~/WebUserControl2.ascx" %>  
  1. public partial class WebUserControl1 : System.Web.UI.UserControl  
  2. {  
  3.     protected void Page_Load(object sender, EventArgs e)  
  4.     {  
  5.         ((WebUserControl2)Parent.FindControl("WebUserControl2")).BirSeyYap();  
  6.     }  
  7. }  
  8.       
Not: Ayrıca ‘Control’ yerine ‘VirtualPath’ kullanılarak da UserControl’ün yolu verilebilir.
Reference olarak Page kullanmak
Benzer şekilde eğer herhangi bir Page’e ulaşmak isterseniz bu sefer ‘Reference’ takısı içerisindeki ‘Page’ özelliğini kullanabiliriz. Fakat UserControl kullanmamızın mantığı zaten bu kontrol içerisindeki kodları ve arayüzü sayfadan ayırmak olduğundan bu yöntemi kullanmak doğru değildir. Bu sebepten ötürü sadece sayfa, UserControl içerisindeki Property’leri doldurmalı veya metotları çağırmalı fakat UserControl, sayfa üzerindeki herhangi bir metot veya özelliği kullanmamalıdır.
  1. public partial class Default : System.Web.UI.Page  
  2. {  
  3.     protected void Page_Load(object sender, EventArgs e)  
  4.     {  
  5.           
  6.     }  
  7.   
  8.     public static void BirSeyYap()  
  9.     {  
  10.           
  11.     }  
  12. }  
  1. <%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl1.ascx.cs" Inherits="WebUserControl1" %>  
  2. <%@ Reference Page="~/Default.aspx" %>  
  1. public partial class UserControls_WebUserControl1 : System.Web.UI.UserControl  
  2. {  
  3.     protected void Page_Load(object sender, EventArgs e)  
  4.     {  
  5.         Default.BirSeyYap();  
  6.     }  
  7. }  
Yukarıdaki şekilde kullanıldığında sayfadaki statik metodu çağırabiliriz. Fakat bu özelliği kullanmadaki sıkıntı ise sayfa tarafında UserControl’ü kullanamıyor olmamızdır. Yani hem sayfada bu UserControl’ü hem de UserControl’de sayfayı referans verdiğimizde haliyle ‘Circular file references are not allowed’ hatası alırız. Dolayısıyla zaten kendi mantığıyla çelişen bu özelliği kullanmak yerine farklı bir Class Library yaratıp işlemlerimizi buradan yönetmek çok daha mantıklı ve işlevseldir.

Şuradan alıntı

Yorumlar

Bu blogdaki popüler yayınlar

Asp.Net ile Mernisten veri Çekme