直接从ascx设置代码隐藏公共属性

时间:2011-07-26 12:22:18

标签: c# asp.net user-controls

我有三个用户控件:usercontrolAusercontrolBusercontrolC 都共享相同的代码隐藏每个都有:

<%@ Control Language="c#" AutoEventWireup="True" Codebehind="usercontrolA.ascx.cs" Inherits="usercontrolA" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>位于ascx的顶部。

在代码隐藏文件中,我有一个名为ShowAll的公共属性。

我知道我可以在将usercontrol放在页面上时设置此属性,例如

<uc1:usercontrolB ID="usercontrolB1" runat="server" ShowAll="true" />

然而我希望ShowAll始终在usercontrolB 上设置为true,所以不必每次将它放在页面上时都设置它。

我知道我可以向usercontrolB添加脚本标记,以便在Page_Load中设置ShowAll:

<script runat="server">
    protected void Page_Load(object sender, System.EventArgs e)
    {
        ShowAll = true;
    }
</script>

但是希望保留我在代码隐藏中已经拥有的Page_Load实现。 是否有其他方法可以自动为usercontrolB设置此属性?

编辑:如果有可能我希望能够在ascx中而不是在后面的代码中设置它,以便稍后其他人可以添加usercontrolD并设置对于ShowAll的所有实例,usercontrolD为true,而无需让我修改和重新编译代码隐藏。

2 个答案:

答案 0 :(得分:5)

您必须在usercontrol类构造函数中设置它。

public ConstructorClassName()
    {
       ShowAll = true;
    }

这是完整的代码示例...

public partial class WebUserControl : System.Web.UI.UserControl
{
  public WebUserControl()
  {
    ShowAll = true;
  }
  private bool _showAll;
  public bool ShowAll
  {
    get { return _showAll; }
    set { _showAll = value; }
  }   

  protected void Page_Load(object sender, EventArgs e)
  {
  }
}

我将默认值设置为true,但您也可以传递添加此用户控件的值。 e.g。

<uc1:usercontrolB ID="usercontrolB1" runat="server" ShowAll="false" />

调用此方法时,它会将值覆盖为false

答案 1 :(得分:0)

在您的代码中,您可以检查实例类型:

protected void Page_Load(object sender, System.EventArgs e)
{
    if (this is usercontrolB) 
    {
         ShowAll = true;
    }
}