从内容页访问母版页上UserControl的属性

本文关键字:UserControl 属性 母版页 访问 | 更新日期: 2023-09-27 18:04:51

试图从内容页获取显示在母版页上的用户控件的属性值,但该值不正确。

MasterPage APSX:

    <div style="float: left">
        <uc:SessionSummary ID="SessionSummary1" runat="Server" />
    </div>

MasterPage CS:

    public SessionSummary SessionSummaryControl
    {
        get { return (SessionSummary)this.FindControl("SessionSummary1"); }
    }

用户控件:

    public bool RejectedBatches
    {
        get { return lblRejectedBatches.Text.ToUpper().Trim() == "YES" ; }
    }

ContentPage ASPX:

<%@ MasterType VirtualPath="MAASDefault.master" %>
<%@ Reference VirtualPath="MAASDefault.master" %>

ContentPage CS:

bool _value = Master.SessionSummaryControl.RejectedBatches;

_value始终为false,即使控件上显示的文本为'Yes'

不知道我错过了什么。如有任何帮助,不胜感激。

编辑-好的,这是我的delima。我已经检查了几个页面事件,并找到了一个会给我的值。但是,由于该属性位于母版页上,并且母版页是内容页的子控件,因此该值仅在内容页的Page_Load事件之后可用。我需要根据母版的这个值在内容页中呈现控件。想法吗?

从内容页访问母版页上UserControl的属性

你可以尝试重写页面的OnLoadComplete,在页面生命周期的这个阶段,控件将加载数据。

protected override void OnLoadComplete(EventArgs e)
        {
            bool _value = Master.SessionSummaryControl.RejectedBatches;
            base.OnLoadComplete(e);
        }

您什么时候呼叫Master.SessionSummaryControl.RejectedBatches ?如果是在用户控件被数据绑定或初始化之前,那么你就会遇到这个问题。

请参考页面生命周期,以确保您访问用户控制的时间足够晚。

我可能会在调试器中逐步执行此操作,以查看发生了什么。

我最好的猜测是lblRejectedBatches的文本在你试图将结果加载到_value

后的某个时间被设置