0

プロジェクトのサーバー側で解決できない問題があります。

説明します:

Global という名前のページがあります。これは ASP.NET ページです。このページでは、CateGories という名前の UserControl を使用します。これで、この UC ページにボタンができました。これを押すと、DB と接続するグローバル ページの関数を呼び出します。

デリゲート(イベント)を使用することにしました

これがコードです。

グローバルページ:

// ここで、関数をイベントに追加します

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);
        }
    }

これですべてが正常に動作するはずですが、コンパイラが if(MainDel!=null) ...

関数には入らず、MainDel は null です。ここで問題がわかりません。関数を MainDel に挿入した後、最終的に null になるのはなぜですか...

どなたかお役に立てれば幸いです よろしくお願いします。最大。

4

2 に答える 2

0

MainDel は、私が見ることができるものに対して実際には null です。

Web フォームに Categories のインスタンスを 1 つ作成し、ユーザー コントロールに別のインスタンスを作成しています。そして、UCでnullであることを確認すると、参照は初期化されていないオブジェクトになります。

これを行う方法の 1 つは、PageLoad() の前にユーザー コントロールをプログラムで作成してページに追加し、その参照を保持してそのプロパティにアクセスできるようにすることです。

もう 1 つの解決策は、Page.FindControl を使用して UC を見つけ、イベントへのサブスクリプションを作成することです。

上記のメソッド名は間違っている可能性があります。長い間 Web フォームを使用していませんでした。

于 2013-07-24T12:44:47.427 に答える
0

Windows アプリケーションと同じように Web アプリケーションを操作しているときに、以前にこの問題に遭遇したことがあると思います。

問題は、ページがリロードされると、ページ クラスの新しいインスタンスが作成されるため、最後のサーバー インタラクションの値が失われることです。

于 2013-07-24T12:42:45.783 に答える