从Web Control访问页面上的数据

时间:2009-04-26 08:03:14

标签: asp.net

我创建了一个Web控件,它需要来自其父页面的一些数据 它如何访问该数据?

更新:感谢您提供快速解决方案,但这些解决方案对我无效。 Visual Studio无法将页面的名称识别为类。我从班级定义的地方取名字:

public partial class Apps_Site_Templates_CollegesMain : cUICommonFeatures

(cUICommonFeatures继承自System.Web.UI.Page)

但是在控件中,当我定义

        protected System.Web.UI.Page parentPage;
        parentPage = (Apps_Site_Templates_CollegesMain)Page;

我收到了一个恭维错误:

找不到类型或命名空间名称'Apps_Site_Templates_CollegesMain'(您是否缺少using指令或程序集引用?)

我觉得我在这里缺少一些非常基本的东西,当我得到答案时,我可能会非常尴尬,但我确实需要帮助......

4 个答案:

答案 0 :(得分:2)

如果父页面类已命名,请说出ParentPage,您可以在控件中执行此操作:

ParentPage page = (ParentPage)this.Page;

然后,您可以访问ParentPage上的属性和方法。如果您有更多页面使用相同的控件,则应使用父页面上的界面访问页面上的属性。

IParentPage page = (IParentPage)this.Page;

这会回答你的问题吗?

答案 1 :(得分:1)

有很多方法可以做到这一点。我认为最好的方法是为数据控件需要添加一个属性,并在页面中设置此属性。

您也可以从控件中访问您的页面:

string dataYouWant = ((YourParentPageName)Page).GetData();

或者您可以将数据添加到viewstate,并从子控件中读取它。

但正如我所说,我会选择第一个。

答案 2 :(得分:1)

所有控件(服务器控件,用户控件和自定义控件)都公开了一个属性Page,允许您从控件的代码中访问包含的Page实例。

因此,您可以这样做:

// In Usercontrol code:
MyParentPage parentPage = this.Page as MyParentPage;
if (parentPage != null)
{
  // Access the properties of the Parent page.
  string t = parentPage.Title;
}

文章“Mastering Page-UserControl Communication”为控制页面交互提供了很好的初学者介绍。

答案 3 :(得分:1)

控件应该写成与它们所在的页面无关。如果控件需要一个数据,那么它应该公开一个公共属性,它是所需数据的类型。它所在的页面然后将该属性设置为控件所需的数据。这允许控件在另一个页面上使用,甚至可以成为UserControl的一部分,然后在父页面上使用UserControl。