从内容页面访问主页面上的用户控件的属性

时间:2011-08-09 15:52:50

标签: c# asp.net master-pages

尝试从内容页面获取显示在母版页上的usercontrol上的属性值,但该值不正确。

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

没有看到我错过的东西。任何帮助将不胜感激。

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

3 个答案:

答案 0 :(得分:3)

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

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

        }

答案 1 :(得分:1)

您何时致电Master.SessionSummaryControl.RejectedBatches?如果在用户控件被数据限制或初始化之前,那么您将遇到此问题。

请参阅页面生命周期以确保您足够晚访问用户控件。

答案 2 :(得分:0)

我可能会在调试器中逐步完成此操作,看看发生了什么。

我最好的猜测是,在您尝试将结果加载到_value之后的某个时间,lblRejectedBatches的文本会被设置