【问题标题】:Get an ascx on a aspx在 aspx 上获取 ascx
【发布时间】:2011-08-19 09:18:44
【问题描述】:

我有一个用户控件,它由显示在 aspx 页面上的父用户控件和子用户控件组成。我需要从子控件中获取 Parent UserControls 的实例。 Parent 有一组嵌套的 .net 控件,在这些嵌套控件中显示子 UserControls,所以如果我从子 UserControls 使用它

MyControl _myControl = (MyControl)this.Parent.Parent.Parent.Parent.FindControl("MyControl");

其中 (this) = 子控件和 (Parent.Parent.Parent.Parent) 将我带回树到真正的父级。

这会让我到达那里,但似乎有更好的方法。有什么建议吗?

【问题讨论】:

  • Errrm,正如你所演示的;这将在该子节点有 3 个父节点的情况下工作。没关系-我要问的是,您实际上要确定什么?如果您需要找到顶级对象,那么您只需循环直到(this.Parent == null) == true
  • 我问的原因是因为 .Net 通常确保 .child 和 .parent 层次结构
  • 我正在使用 Teleric 的 RadPanel 作为工作流控件。因此,当用户完成 panel1 时,我需要使用下一个 usercontrol 打开 panel2。因此,“下一步”按钮位于子控件上,我需要将树返回到 RadPanel 控件,以便激活下一个面板。我在做什么类似于demos.telerik.com/aspnet-ajax/panelbar/examples/…

标签: c# asp.net user-controls


【解决方案1】:

ascx 不应该知道任何关于其父级的信息:这表明它与其他类的耦合过于紧密。它们也可能是一个类。

另一种方法是遵循law of Demeter:从MyControl 中找出this(您的用户控件)需要什么,使其成为属性,并让您的aspx 提供它而不是要求它。

【讨论】:

  • 对不起,但这对问题上下文有什么实际帮助?
  • 以这种方式更改设计将使MyControlthis 更易于使用(要求的“更好的方式”)。
  • 我也同意这个说法。 Parent UserControl 最初是一个显示在弹出窗口中的 aspx。现在我想到的所有 UserControl 都可以合二为一。
【解决方案2】:

如果您使用的是母版页,则可以从那里开始并使用容器 ID 来查找控件。这仅取决于控件更接近于什么。

这可能会有所帮助: http://www.asp.net/master-pages/tutorials/control-id-naming-in-content-pages-cs

如果您从父页面中的控件访问值,您可以做的另一件事是在页面加载时将该值放入 HttpContext.Current.Items["MyControlValue"] 中。这样您的用户控件就可以轻松获取该值

【讨论】:

  • 这些用户控件大约在中间,所以第一个建议同样糟糕。我想我会试试 2 号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-13
  • 1970-01-01
  • 2012-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多