概要 :
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;
}
}
}
ありがとう。