Microsoft Türkiye Açık Akademi
Microsoft tarafından Türkiye'deki ilk ücretsiz online yazılım okulu Açık Akademi açıldı....
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;
public partial class WebUserControl2 : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
public void BirSeyYap()
{
}
}
Daha sonrasında ascx dosyasında Reference verildikten sonra artık diğer UserControl emrimize amade durumdadır.
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl1.ascx.cs" Inherits="WebUserControl1" %>
<%@ Reference Control="~/WebUserControl2.ascx" %>
public partial class WebUserControl1 : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
((WebUserControl2)Parent.FindControl("WebUserControl2")).BirSeyYap();
}
}
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.
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
public static void BirSeyYap()
{
}
}
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl1.ascx.cs" Inherits="WebUserControl1" %>
<%@ Reference Page="~/Default.aspx" %>
public partial class UserControls_WebUserControl1 : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
Default.BirSeyYap();
}
}
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.
Microsoft tarafından Türkiye'deki ilk ücretsiz online yazılım okulu Açık Akademi açıldı....
Bir önceki yazımızda Blob servisine kısa bir giriş yapmıştık. Yazıyı okumak isterseniz
Microsoft'un bulut mimarisi Windows Azure platformu üzerinde veri altyapısı alışıla gelmiş yöntemlerden...
Windows Azure Blob Servisi
Gökhan ZER
Teşekkürler,
Ara 22, 2010 @ 09:21
uğur tütün
konu çok güzel ve yerinde ama açıklamalar yeterli gelmedi.. özellikle usercontrol un içinde bulunduğu aspx sayfaya veya başka bir sayfanın içindeki olaya nasıl ulaşacağımızı da anlatırsanız memnun oluruz..
Ara 31, 2010 @ 17:55
Serkan Yazıcıoğlu
Teşekkür ederim,
Bahsettiğiniz üzere yazıyı biraz daha genişlettim. İyi çalışmalar…
Oca 03, 2011 @ 06:13
Oğuz Ali Can
eyvallah hocam eline sağlık güzel anlatmışsın
Ağu 12, 2011 @ 09:51
Fatih Yaman
Merhaba,
Usercontrol den aşağıdaki gibi bir method çağırmaktayım
((UserControlAdminTest)Parent.FindControl(“UserControlAdminTest”)).GridBind();
aldığım hata “Object reference not set to an instance of an object.”
bu konu hakkında yardımlarını rica ederim.
Ara 12, 2011 @ 10:05
Serkan Yazıcıoğlu
Merhaba,
Reference Path’inin doğru verildiğinden ve bu iki user control’ünde aynı sayfada yer aldığından emin olabilir misiniz?
Ara 12, 2011 @ 10:48
Fatih Yaman
Merhaba,
ilk usercontrolü aşağıdaki method ile çağrıyorum
daha sonrasında bu usercontrol içindeki bir buton ile diğer usercontrolü çağırıyorum.
var holder = new Page();
var panel = new Panel();
var userControl = new System.Web.UI.UserControl();
userControl = (System.Web.UI.UserControl)holder.LoadControl(userControlFullName);
panel.Controls.Add(userControl);
plcControl1.Controls.Add(panel);
Ara 12, 2011 @ 11:42
Serkan Yazıcıoğlu
Burada her bir sınıfı dinamik kullanmışsınız. Öncelikle tüm kontrolleri static kullanıp sonrasında birbirlerine erişmeyi denemelisiniz.
Ara 12, 2011 @ 12:04