如何从代码隐藏

时间:2017-03-13 16:00:59

标签: c# asp.net .net webforms

我创建了一个自定义用户控件,其中包含以下表格(我稍微简化了一下以便于阅读):

<table id="tblWeekCalendar" runat="server">
    <!-- .... -->
</table>

我试图在另一个页面上从Code Behind创建自定义控件:

// I'm passing values in on the constructor as an alternative to using attributes
MasterScheduleCalendar sch = new MasterScheduleCalendar(true, 123);

但是,当我尝试在构建控件时从自定义控件的代码隐藏中访问tblWeekCalendar(来自我的自定义控件的主表)时,我发现它是null

HtmlTableCell tableCell = tblWeekCalendar.FindControl($"tdR{week}Day{day}") as HtmlTableCell;

此代码以从Page_Load

调用的方法运行

我尝试执行以下操作,而不是像this question那样直接调用构造函数,但仍然存在同样的问题:

MasterScheduleCalendar ctrl = (MasterScheduleCalendar)Page.LoadControl(typeof(MasterScheduleCalendar), new object[] { true, schedule.MasterScheduleID });

如前所述,这种情况发生在从Page_Load事件处理程序调用的方法中,所以我对tblWeekCalendarnull的原因感到有些困惑。 } 在此刻。有没有人对如何解决这个问题有任何建议?

1 个答案:

答案 0 :(得分:1)

所以你做错了。

请勿尝试访问“tblWeekCalendar”或您控件中的任何其他元素。

实现重新获取值并更新控件的方法,或者在需要时获取值的方法。

MyWeekOfTheDay week = tblWeekCalendar.GetWeekOfTheDay();
List<MyDays> days = tblWeekCalendar.GetViewDays();
List<MyMonth> months = tblWeekCalendar.GetCurrentYear().GetMonths();

类似的东西。