簡體   English   中英

事件無法與用戶控制一起使用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM