我有一个Web站点项目,并在其中有一个用户Web控件定义在一个ascx文件中。在.master控制类型中找不到子控件页面中的Web控件
该控件被添加到Site.Master中,并且它在页面上正确显示并且一切正常。
我需要覆盖派生自Site.Master的其中一个页面上的某些控件的字段。
// In OnLoad:
MyControlName control = (MyControlName) Page.Master.GetBaseMasterPage().FindControl("controlID"));
问题是MyControlName未在子页面上注册为有效类型。如果我直接向子页面添加第二个控件实例,上面的工作将根据需要进行,但如果控件不是直接放在页面上,而是仅在母版页中定义,则该类型是未定义的。该控件不在名称空间中,并在项目中定义,所以我不知道为什么它有这样的问题位置适当的类型。
如果我在OnLoad中放置了一个断点,那么为控件列出的类型是ASP.my_control_name_ascx,但使用它也不起作用。
为什么孩子类不能引用正确的类型?我能解决这个问题吗?
谢谢!
是的,这是我们自己的功能。我们有一个网站的主人,和科大师。并非所有节主都必须从网站主控继承,所以该功能只能运行到“最高”主页面。 如果在页面上放置了控件的第二个实例,则该代码正常工作。即它将控件定位在主控件上并更新主控页面控件的状态,但只有当子页面上有控件的实例时才会这样。否则,编译器会说这是一个未知的类型。所以这只是一个类型解析问题,而不是功能问题。 – turtle 2010-06-07 17:59:13
关于该代码示例的快速(迂腐)点;你需要支持Page.Master来获取类型转换:MyControlName control =((MyControlName)Page.Master).FindControl(“controlId”); – 2010-10-12 14:15:27
我不明白为什么,Page.Master是MasterPage类型的属性,它继承自Control,它具有FindControl方法。您只需要投射结果,这是FindControl方法的结果,您不需要进一步括号。 – 2010-10-12 14:54:04