我有三个用户控件:usercontrolA
,usercontrolB
和usercontrolC
都共享相同的代码隐藏每个都有:
<%@ 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,而无需让我修改和重新编译代码隐藏。
答案 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;
}
}