获取依赖项目中的用户控件的引用

时间:2013-07-08 14:59:21

标签: asp.net

摘要:

Project1包含一个用户控件tab1.ascx(基本上是面板1,2,3等的集合)。

Project1中引用了Project2。

Project2包含一个母版页(MasterPage.cs),我想在其中调用此用户控件(tab1.ascx)。

从项目2调用用户控件的原因是我可以根据用户权限集中控制从母版页启用/禁用选项卡。 对于例如对于管理员,所有选项卡都将可见。 对于普通用户,只有第一个选项卡可见。

问题:

我无法在项目2中添加项目1的引用(循环依赖)。

我能够找到控件并且我可以使用强制转换(System.Web.UI.UserControl),但这个强制转换并不能帮助我调用实际用户控件的方法 - tab1.ascx

我可以在Project 2中引用用户控件吗?

编辑: 使用以下代码我可以调用方法:

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

现在,它实际上是调用用户控件的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;
            }
        }
    }

感谢。

3 个答案:

答案 0 :(得分:0)

我会声明界面,让我们说

interface IControl {
    void foo();
}
在Project2中,使用此tab1.ascx实现此接口,并在找到此接口后键入control。 (此接口也可以在Project3中定义,将由Project1和Project2引用)。

答案 1 :(得分:0)

您需要修复循环依赖问题。重新考虑你的设计。如果需要在两个项目之间共享某些内容,那么您可以创建第三个项目来封装控件。

答案 2 :(得分:0)

用户控件无法实现。

如果要跨项目bordaries共享自定义控件,则必须在单独的DLL中创建自定义控件,该DLL继承自Control或现有控件,如本msdn文章中所述:http://msdn.microsoft.com/en-us/library/zt27tfhy(v=vs.100).aspx

如果您想使用您创建的用户控件,则必须将其复制到“project2”