Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用户控件更改属性并在用户控件中使用';s代码隐藏_C#_Asp.net_User Controls - Fatal编程技术网

C# 用户控件更改属性并在用户控件中使用';s代码隐藏

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" %> <%@

我有一个从一个母版页继承的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/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;
    }