我有一个网站项目,在其中我有一个在 ascx 文件中定义的用户 Web 控件。
控件已添加到 Site.Master,它正确显示在页面上,一切正常。
我需要覆盖派生自 Site.Master 的页面之一上的某些控件字段。
// In OnLoad:
MyControlName control = (MyControlName) Page.Master.GetBaseMasterPage().FindControl("controlID"));
问题是 MyControlName 没有在子页面上注册为有效类型。如果我将控件的第二个实例直接添加到子页面,上面的操作会根据需要进行,但是如果控件没有直接放在页面上,而是只在母版页中定义,则类型是未定义的。该控件不在命名空间中,而是在项目中定义的,所以我不知道为什么它会在适当的类型位置出现这样的问题。
如果我在 OnLoad 中放置一个断点,为控件列出的类型是 ASP.my_control_name_ascx,但使用它也不起作用。
为什么子类不能引用正确的类型?我可以解决这个问题吗?
谢谢!
最佳答案
该控件不具有整个项目的全局范围。它只能在控件已注册的页面上作为一种类型进行选择。所以你必须在子页面上注册控件:
<%@ Register src="WebUserControl.ascx" tagname="WebUserControl" tagprefix="uc1" %>
您需要像上面那样在子 aspx 页面的顶部添加一个注册标记。
另一种选择是你可以为控件创建一个接口(interface),它公开你想要访问的属性或方法,并将接口(interface)放在 app_code 或其他一些全局可访问的地方,然后让控件实现接口(interface),并转换控制界面。
关于c# - 在 .master 控件类型中添加的 Web 控件在子页面中找不到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2989781/