无法从另一个用户控件调用ASP.NET用户控件

时间:2010-07-30 12:22:17

标签: c# asp.net user-controls

我希望从另一个用户控件访问用户控件的公共属性。 但是,我无法访问另一个用户控件。即使在使用名称空间“ASP”之后,我也只能看到对当前用户控件的引用。

但是,在页面中,我可以使用ASP命名空间引用所有用户控件。

我错过了什么,或者需要那样做?

更新 这里的具体情况 -
我有两个用户控件A和B.现在它们都在Page Default.aspx上使用。控件A上有一个公共proprty,其中包含在A中单击的控件的名称。我希望在控件B中访问此属性以做出一些决定。 有了你的建议gioven,我理解通过容器页面的FindControl方法到达控件,但是当我无法在B中获得控件A的引用时,如何将其转换为控件A来获取属性值?

感谢帮助人员!

3 个答案:

答案 0 :(得分:2)

一个用户控件不应该知道另一个用户控件(当然,除了任何包含的子控件之外)。如果ControlABC引用了ControlXYZ,那么你永远不能在任何页面上使用ControlABC,除非该页面还有一个ControlXYZ实例 - 这将极大地损害你重用ControlABC的能力。

解决此问题的一种方法是使用事件“连接”两个控件之间的连接。这样,ControlABC对ControlXYZ没有很强的依赖性 - 它可以很容易地重复使用,即使在没有ControlXYZ的页面上也是如此。该页面可以管理两个控件之间的连接,将ControlXYZ上的委托添加到ControlABC上的事件,这样两个控件就可以进行通信。

与事件/代理相比,可能还有其他技术允许您的控件相互交互,而不会引入强大的依赖关系,这可能有利有弊。其他SO成员会指出他们,我敢肯定。

答案 1 :(得分:0)

这正是它所需的方式。

在我看来,将一个用户控件耦合到另一个用户控件似乎是一个坏主意。没有办法保证两者都出现在页面上。

如果没有其他方法,用户控件可以访问该页面。然后,您可以使用Page.FindControl查找其他用户控件并以这种方式访问​​其公共属性。

答案 2 :(得分:0)

“namespace”与“scope”不同:namespace只是一种方法来定义类定义。范围是您可以在代码中的特定点看到的变量(实例)。

其他用户控件是否在同一页面上? (如果没有,那么根本不起作用)。 您需要从当前用户控件转到页面。从那里你可以找到其他用户控件。

相关问题