c# - 在 .master 控件类型中添加的 Web 控件在子页面中找不到

标签 c# asp.net webforms

我有一个网站项目,在其中我有一个在 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/

相关文章:

C# - 两点之间的曲线

c# - Razor 复选框未绑定(bind)到模型

c# - 为什么 ExecuteNonQuery 返回 "Input is not valid in this context"(ASP.NET | Ole Db)?

c# - 绑定(bind)空数据表时的 DetailsView 错误?

c# - 我可以调试带有源断点的 nuget 包而不是单步执行吗?

javascript - 如何从模态对话框下载文件并回发给自身?

c# - asp.net c# 中的登录页面错误

c# - 如何在 .NET 中承载无窗口 ActiveX 控件

c# - 在不同的服务器上查找目录

html - CSS 文件未链接到 HTML 页面