[英]Event wont work with user control
我有一個問題,我無法在項目的服務器端解決。
我會解釋:
我有一個名為Global的頁面,這是ASP.NET頁面。 此頁面使用名為CateGories的UserControl。 現在,我在該UC頁面上有一個按鈕,當我按下該按鈕時,我想在Global頁面上調用一個與數據庫建立連接的函數。
我決定使用代表(事件)
這是代碼。
全球頁面:
//這里我將函數添加到事件中
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ShowCurrentTime.Text = DateTime.Now.ToString();
}
CateGories ClassCat = new CateGories();
ClassCat.MainDel += PopulateLinks;
}
//這是事件將運行的函數
public void PopulateLinks(string CategoryName)
{....}
UC頁面的代碼(CateGories):
//事件的委托
public delegate void Click(string ButtonName);
public event Click MainDel = null;
//單擊按鈕時調用的函數
protected void News_Click(object sender, EventArgs e)
{
if (MainDel != null)
{
MainDel(News.Text);
}
}
現在Everythig應該可以正常工作,但是當編譯器進入if(MainDel!=null)
。
它沒有進入函數,MainDel為null。 我在這里看不到問題,為什么在我將函數插入MainDel之后,它最終還是為null ...
如果有人可以幫助我,我會很高興。 最高
我想我以前以Windows應用程序的方式使用Web應用程序時遇到過此問題。
問題在於,當重新加載頁面時,將創建頁面類的新實例,因此上次服務器交互中的任何值都將丟失。
我所看到的MainDel確實為空。
您正在Web窗體上創建一個CateGories實例,而在用戶控件上創建另一個。 一旦在UC上檢查它是否為空,引用就是未初始化的對象。
做到這一點的一種可能方法是,以編程方式在PageLoad()之前的頁面上創建並添加用戶控件,並保留對其的引用,以便您可以訪問它的屬性。
另一個解決方案可能是使用Page.FindControl查找UC並預訂該事件。
上面的方法名稱可能不正確,已經有很長時間沒有使用Web表單了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.