0

概要 :

Project1 には、ユーザー コントロール tab1.ascx (基本的にはパネル 1、2、3 などのコレクション) が含まれています。

Project2 は Project1 で参照されます。

Project2 には、このユーザー コントロール (tab1.ascx) を呼び出すマスター ページ (MasterPage.cs) が含まれています。

プロジェクト 2 からユーザー コントロールを呼び出す理由は、ユーザー権限に基づいてマスター ページからタブの有効化/無効化を一元的に制御できるためです。たとえば管理者の場合、すべてのタブが表示されます。通常のユーザーの場合、最初のタブのみが表示されます。

問題:

プロジェクト 1 の参照をプロジェクト 2 に追加できません (循環依存)。

コントロールを見つけることができ、キャスト (System.Web.UI.UserControl) を使用できますが、このキャストは実際のユーザー コントロールのメソッドを呼び出すのに役立ちません - tab1.ascx

Project 2 でユーザー コントロールを参照する方法はありますか?

編集:次のコードを使用して、メソッドを呼び出すことができます:

tab1.GetType().InvokeMember("DisableTab", BindingFlags.InvokeMethod, null, tab1, new object[] { "Conf テスト" });

これで、実際にユーザー コントロールの DisableTab メソッドが呼び出されます。しかし、その中のアイテムを見つけることができません。theTabStr.Items は 0 を返します。

theTabStr は実際にはリピーター コントロールです。

    public void DisableTab(string strTabName)
    {
        foreach (RepeaterItem itmRptr in theTabStr.Items)
        {
            LinkButton lnkbtnTab = (LinkButton)itmRptr.FindControl("theTab");
            if (lnkbtnTab != null && lnkbtnTab.Text == strTabName)
            {
                lnkbtnTab.Enabled = false;
            }
        }
    }

ありがとう。

4

3 に答える 3

0

さて、私はインターフェースを宣言します、としましょう

interface IControl {
    void foo();
}

Project2 で、この tab1.ascx にこのインターフェイスを実装させ、このインターフェイスを見つけたら control と入力します。(このインターフェイスは、Project1 と Project2 の両方で参照される Project3 でも定義できます)。

于 2013-07-08T15:06:28.833 に答える