【问题标题】:Accessing user controls’s constituent controls from a hosting web page从托管网页访问用户控件的组成控件
【发布时间】:2009-12-02 03:30:32
【问题描述】:


我读到用户控件的组成控件只能由用户控件访问,因此承载该用户控件的网页无法接收事件、调用方法或设置这些包含控件的属性。

但我不确定上述说法是否属实,因为我能够(从托管网页)访问 ClickButton.Click 事件(假设 WebUserControl1 包含 ClickButton 控件):

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
         Button ClickButton = (Button)WebUserControl1.Controls[0];
         ClickButton.Click += someClickHandler;
    }


感谢

【问题讨论】:

    标签: asp.net user-controls


    【解决方案1】:

    整个页面是一个控件树。无论该控件的父级如何,您都可以“浏览”此树。例如,从用户控件内部,您可以向下到可能是另一个控件的父级,然后再向下到页面,然后到母版页,依此类推。

    所以是的,你是对的,它并没有隐藏到你无法访问它的地步,但它也没有发布。以类似的方式使用反射,您可以调用您无法调用的私有方法。使用某些工具,您可以访问和更改已编译的代码;所以没有什么是真正遥不可及的。

    这些界限的设置和使用是为了尽量减少复杂性,而不是作为无法跨越的绝对墙。

    【讨论】:

      【解决方案2】:

      您可以公开用户控件的属性(即设置)、控件和事件,这意味着您不必在用户控件中查找控件。

      【讨论】:

      • 我意识到,但我试图暗示的是,托管网页应该只能访问包含的控件的那些细节(事件、方法和属性)(通过包含的控件我引用到用户控件内部的控件),用户控件决定公开哪个。但是由于 WebUserControl1.Controls 字典,包含控件的所有细节(事件、方法和属性)都暴露了,无论您喜欢与否。例如,也许我希望包含控件的方法只能访问托管用户控件,但是
      • 由于 WebUserControl.Controls 字典,托管此用户控件的网站也可以访问此事件
      猜你喜欢
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-09
      • 1970-01-01
      相关资源
      最近更新 更多