从模板化控件中调用 ASP.net 页面对象时为空

Posted

技术标签:

【中文标题】从模板化控件中调用 ASP.net 页面对象时为空【英文标题】:ASP.net Page object null when invoking it from within templated control 【发布时间】:2010-11-04 19:52:08 【问题描述】:

我创建了一个在内部使用 ITemplate 的控件,以允许用户添加自己的内容。

<my:MyControl id="myControl" runat="server">
   <Content>
         //some stuff in here
   </Content>
</my:MyControl>

“内容”属性是模板。 (这只是简化了。这个结构在一个更大的控件中)。

现在我遇到的问题是我的用户将他自己的 UserControl 放在 &lt;Content&gt;..&lt;/Content&gt; 中。这应该不是问题,但是 UserControl 在 PageLoad 事件中调用页面的 QueryString。现在我认识到,当 UserControl 驻留在模板中时,Page 对象为 null,而如果它放在外面,则它可以正常工作,就像通常在页面上一样。

有人知道这可能是什么问题吗?

【问题讨论】:

【参考方案1】:

我见过this.Page 从嵌套用户控件中返回 null 的情况。

在这种情况下,使用构造 (Page)HttpContext.Current.Handler 使页面对象正常工作。

【讨论】:

感谢您的帖子。问题只是对页面对象的调用是在使用我的控件的某些开发人员可能已经编写的用户控件之一中完成的。所以我无法控制...【参考方案2】:

我不知道它是否还有用,但也许它仍然有些用......

当您实例化模板(使用InstantiateIn)时,生成的控件层次结构实际上是否添加到您的MyControl 的Controls 集合中? AFAIK,这是确保您拥有非空 Page 属性的方法。

【讨论】:

以上是关于从模板化控件中调用 ASP.net 页面对象时为空的主要内容,如果未能解决你的问题,请参考以下文章

模型在按钮单击 ASP.NET MVC 5 时为空

使用 ASP.Net 从 HTML 发送电子邮件

Asp.net MVC 中的 jquery 验证错误 - 无法获取属性“调用”的值:对象为空或未定义

从 sql 数据源获取数据到 asp.net 控件中

ASP.NET内容页中访问母版页中的对象

如何在 reportviewer 控件上从 asp.net 调用打印?