C# 用户控件更改属性并在用户控件中使用';s代码隐藏
我有一个从一个母版页继承的aspx页面,有两个内容占位符,如下所示:C# 用户控件更改属性并在用户控件中使用';s代码隐藏,c#,asp.net,user-controls,C#,Asp.net,User Controls,我有一个从一个母版页继承的aspx页面,有两个内容占位符,如下所示: <%@ Register Src="Controls/YearBook/YearBookExpander.ascx" TagName="YearBookExpander" TagPrefix="uc1" %> <%@ Register Src="Controls/YearBook/YearBook.ascx" TagName="YearBook" TagPrefix="uc2" %> <%@
<%@ Register Src="Controls/YearBook/YearBookExpander.ascx" TagName="YearBookExpander" TagPrefix="uc1" %>
<%@ Register Src="Controls/YearBook/YearBook.ascx" TagName="YearBook" TagPrefix="uc2" %>
<%@ Register Src="Controls/YearBook/YearBookSearch.ascx" TagName="YearBookSearch" TagPrefix="uc3" %>
<asp:Content ID="Content1" ContentPlaceHolderID="cphHead" runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="cphMenu" runat="Server">
<asp:UpdatePanel ID="upExpander" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<nav id='main-nav'>
<asp:Panel ID="pnlExpander" runat="server" CssClass="navigation">
<uc1:YearBookExpander ID="ybExpander" runat="server" OnSearchClickEvent="ybExpander_Search" />
</asp:Panel>
</nav>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="cphPage" runat="Server">
<asp:Panel ID="pnlPage" runat="server">
<uc2:YearBook ID="YearBook1" runat="server" ContentVisible="true" />
<uc3:YearBookSearch ID="ybSearch" runat="server" />
</asp:Panel>
</asp:Content>
<asp:Content ID="Content4" ContentPlaceHolderID="cphScripts" runat="Server">
<script src="../Scripts/PersianCalendar.js" type="text/javascript"></script>
<script type="text/javascript">
Calendar = 1;
</script>
</asp:Content>
在aspx代码隐藏更改值基础中,单击一个链接:
private void uExpander_ExpanderClicked(object sender, ExpanderEventArgs e)
{
switch (e.Clicked)
{
case "YearBook":
YearBook1.ContentVisible = true;
ybSearch.ContentVisible = false;
break;
case "Search":
ybSearch.ContentVisible = true;
YearBook1.ContentVisible = false;
break;
default:
YearBook1.ContentVisible = true;
ybSearch.ContentVisible = false;
break;
}
}
在用户控件中,我将该值检查到可见/不可见用户控件的面板:
if (ContentVisible)
{
pnlCalendar.Visible = true;
pnlDefaultEvents.Visible = true;
pnlAddEvent.Visible = true;
}
else
{
pnlCalendar.Visible = false;
pnlDefaultEvents.Visible = false;
pnlAddEvent.Visible = false;
}
但这段代码不起作用,因为用户控件在执行aspx代码之前启动。。。
我怎样才能实现这个场景?还有什么其他解决方案
谢谢您有两个选择:
将ContentVisible属性更改为:
或移动该代码:
进入用户控件中的事件,该事件在生命周期中晚于uExpander_ExpanderClick父页面中的事件。OnPreRender应该足够晚,但不能太晚,无法隐藏/显示面板
if (ContentVisible)
{
pnlCalendar.Visible = true;
pnlDefaultEvents.Visible = true;
pnlAddEvent.Visible = true;
}
else
{
pnlCalendar.Visible = false;
pnlDefaultEvents.Visible = false;
pnlAddEvent.Visible = false;
}
[Bindable(true, BindingDirection.TwoWay)]
public bool ContentVisible
{
set
{
pnlCalendar.Visible = value;
pnlDefaultEvents.Visible = value;
pnlAddEvent.Visible = value;
}
}
if (ContentVisible)
{
pnlCalendar.Visible = true;
pnlDefaultEvents.Visible = true;
pnlAddEvent.Visible = true;
}
else
{
pnlCalendar.Visible = false;
pnlDefaultEvents.Visible = false;
pnlAddEvent.Visible = false;
}