现在有自定义控件a.asxc,该控件中使用了另外一个自定义控件b.ascx。页面test.aspx中加载的是a.ascx,现在我要在test.aspx中访问b.ascx中的控件值,请问如何访问?谢谢大家了?

解决方案 »

  1.   

    a.ascx中提供一个public 方法或属性,在这个方法或属性中取b.ascx中的值.
    test.aspx中直接调用就可以了.
      

  2.   


    b.ascx :<%@ Control Language="C#" AutoEventWireup="true" CodeFile="b.ascx.cs" Inherits="b" %>
    <asp:TextBox ID="TextBox1" runat="server" Text="XXX"></asp:TextBox>a.asxc :<%@ Control Language="C#" ClassName="a"  %>
    <%@ Register TagName="B" TagPrefix="BX" Src="~/b.ascx" %>
    <script runat="server">
    page :protected ASP.a aaa;    protected void Page_Load(object sender, EventArgs e)
        {
           
            aaa = (ASP.a)LoadControl("~/a.ascx");
            Response.Write(((TextBox)aaa.FindControl("TEST").FindControl("TextBox1")).Text);
        }
      

  3.   

    修改了。 这个例子 A 用户控件里面 用 B用户控件
    在页面里通过A 查找B里面的TextBox  的Text属性。
    b.ascx : <%@ Control Language="C#" AutoEventWireup="true" CodeFile="b.ascx.cs" Inherits="b" %> 
    <asp:TextBox ID="TextBox1" runat="server" Text="XXX"> </asp:TextBox> 
    a.asxc : <%@ Control Language="C#" ClassName="a"  %> 
    <%@ Register TagName="B" TagPrefix="BX" Src="~/b.ascx" %> 
    <script runat="server"> <asp:Button ID="Button1" runat="server" Text="Button"></asp:Button>
    <BX:B ID="TEST" runat="server" /> page : protected ASP.a aaa;     protected void Page_Load(object sender, EventArgs e) 
        { 
          
            aaa = (ASP.a)LoadControl("~/a.ascx"); 
            Response.Write(((TextBox)aaa.FindControl("TEST").FindControl("TextBox1")).Text); 
        } 
      

  4.   

    大多数事后,首先我会否决这个需求。尽管,我在帖子 http://topic.csdn.net/u/20090531/17/3b26928d-676e-457c-b007-7c7523cada30.html 中讨论过一种功能,但是好的设计者都是黑白、正反、好坏两面都精通,可是他绝对不糊涂地只知道走中间路线。大多数“正”的设计需求中,你的test.ascx不要去管a.ascx是怎样实现的,a.ascx实现对一种功能接口的包装,test.ascx无权其想当然地里边一定有b.ascx。只有经过论证确实需要开发的机制才在a.ascx上开一个接口属性来操作它。大多数时候,在a.ascx上只提供一个普通的数据属性,而不是提供控件属性,这样test.ascx只能操作数据而不用去管a.ascx是如何实现此数据的表现的。而在我们测试一个软件的时候,这时正好是“反动”的时候,才需要去测试一些原先声明过的内部实现控件,此时我们也尽可能都给出粗放的接口描述,只要这种描述正好描述客户的需求就足够好了。你在本来应该正统地组织软件的时候,没有注重a.ascx包装好内部实现机制,那么软件架构就非常脆弱,耦合太多。