2011-04-11 97 views
1


编号喜欢从我的.ascx引用我的.aspx属性。从.ascx引用.aspx属性

比方说我的网页类是:

public partial class MyAdminPage : System.Web.UI.Page 

我期待我可以从我的.ascx做:

MyAdminPage myPageInstance =(MyAdminPage)this.Page;

MyAdminPage myPageInstance = this.Page作为MyAdminPage;

我不能。

如何从.ascx引用我的页面类?

更新1

感谢您的答复。

我忘了提及.aspx有一个母版页,并且在contentPlaceholder中我有.ascx控件。

所以从我的.ascx如果我这样做:
this.Parent - >我得到一个参考 “的ContentPlaceHolder”
this.Parent.Parent - >我得到一提到 “HtmlForm控件”
这.Parent.Parent - >引用“母版页”。

我不会在任何其他.aspx页面中重复使用.ascx。

+4

我想你错过了用户的控制点一点点:用户控件是可以在多个网页上使用的组件。它与您的对象模型中的类相似。 一旦你的组件掌握了包含页面的知识,你就不能再在多个页面中使用它,而且它不是一个真正的用户控件。我认为你有几个选择:1.放弃用户控制,并将其作为网页内的常规控件; 2.重新设计用户控件,使其不必知道包含页面。 – 2011-04-11 12:54:45

+0

@sJhonny谢谢,在这种情况下,我将仅在一个.aspx页面中使用此.ascx控件。我不会重复使用它。 – rauland 2011-04-11 13:10:12

回答

4

sJohnny的评论是当场上,你不应该试图从孩子(控制)修改父(页)属性。处理这种情况的一个好方法就是当孩子需要父母行动时,孩子才能举办活动。这样父母就可以简单地订阅该事件并调用当时所需的任何属性。这样,您的用户控件决不会与此特定页面的实现相关联。

2

您可以尝试

MyAdminPage myPageInstance = this.Parent as MyAdminPage; 
if(myPageInstance != null) 
{ 
... 
} 
0

你也可以使用MyAdminPage myPageInstance = (MyAdminPage)this.Page;