决定在运行时使用的用户控件

时间:2013-01-17 15:45:37

标签: c# asp.net

我在页面上定义了2个用户控件:

<%@ Register Src="Foo.ascx" TagName="FooControl" TagPrefix="acme" %>
<%@ Register Src="Bar.ascx" TagName="BarControl" TagPrefix="acme" %>
.
.
.
<acme:FooControl ID="myFoo" runat="server" Visible="false" />
<acme:BarControl ID="myBar" runat="server" Visible="false" />

在运行时,我想在页面代码的不同位置设置一个用户控件的属性。例如:

protected void SomeMethod()
{
     if (isSomeCondition) 
     {
         myFoo.Visible = true;         
     }
     else
     {
         myBar.Visible = true;
     }

     // ...

     if (somethingElse) 
     {
         if (isSomeCondition) 
         {
             myFoo.Prop1 = 123;         
         }
         else
         {
             myBar.Prop1 = 123;
         }
     }

     // ...
}

我知道我可以从一个通用接口继承2个用户控件,但还有另一种(可能更好)的方法吗?

1 个答案:

答案 0 :(得分:1)

编辑:我刚刚意识到我的大部分答案已经被同一问题的评论所涵盖。向评论的人道歉,我并没有故意“窃取”你的内容...... :)

不,我可以想到不同的方法来实现相同的结果(通过反射调用属性或使用FindControl来处理某些内容)但我想不出任何比使用两个控件实现相同的界面更好的方式。

然后,您可以通过其他属性访问活动控件,例如:

public IMyControl ActiveControl 
{
  get 
  {
    return (isSomeCondition)? myFoo : myBar; 
  }
}