用户控件a.ascx,页面a.aspx。比如a.ascx上面简单地有一个LABEL和一个按钮。双击a.ascx,进入a.ascx.vb,在page_load中将LABEL上的显示文本设置为HI,按钮的点击事件中将其改为HELLO。代码如下:Public Class a
    Inherits System.Web.UI.UserControl#Region " Web 窗体设计器生成的代码 "    '该调用是 Web 窗体设计器所必需的。
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()    End Sub
    Protected WithEvents Label1 As System.Web.UI.WebControls.Label
    Protected WithEvents Button1 As System.Web.UI.WebControls.Button    '注意: 以下占位符声明是 Web 窗体设计器所必需的。
    '不要删除或移动它。
    Private designerPlaceholderDeclaration As System.Object    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
        '不要使用代码编辑器修改它。
        InitializeComponent()
    End Sub#End Region    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '在此处放置初始化页的用户代码
        Label1.Text = "HI"
    End Sub    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Label1.Text = "hello"
    End Sub
End Class我的问题是,如何将这个LABEL的固有属性暴露给a.aspx文件呢?我将控件拖到页面上,但是在页面的代码中无法访问这些属性。看了一些文章,知道可以自己定义属性,但是自己定义的属性是写在哪里呢?是a.ascx中吗?我在class a中定义了属性,但是虽然将控件拖到了页面上,在a.aspx.vb中却无法访问,必须将class a实例化出一个来才能用,可我又想不出这个在代码中new出来的a与页面上那个用户控件a1有什么关系呢?是两码事吧?有没有办法在aspx.vb中直接访问到用户控件中各个控件的固有属性呢?比如直接设置它们的背景色什么的?

解决方案 »

  1.   

    不用new一个新的
    只要在页面的cs文件声明一下那个usercontrol,就可以用它的方法和属性了
    默认拖进去代码里并没有声明.
    public 你的UserControl UserControlID;
      

  2.   

    我没有试过,你可以尝试一下.
    用js:
       var control=document.getElementById("UserControlId");
       var property=control.getAttribute("属性");
       看property.value能否取到值?
      

  3.   

    <%@ Register TagPrefix="Module" TagName="top" Src="top.ascx" %>
    <Module:top id="top1" runat="server" />
    其实就是一个文件包含吧。我理解
      

  4.   

    感觉就是用户控件上的控件被ascx这层用户控件覆盖住了,aspx无法清楚地看到它,而是通过用户控件来看它、操作它。有没有办法让aspx与用户控件上的控件直接通信?其实这个问题有点弱:要想直接通信就直接用控件得了。我也意识到这个问题,呵呵。可是我的目的在于用用户控件封装一定的功能,但是同时又不失直接使用控件的一些特点,如允许用户设置控件的外观属性。或许只能通过用户控件中的自定义属性来传递一下这种操作?
      

  5.   

    属性??假如你的控件:
    a.ascx定义属性
    private string title="默认";
    public string Title
    {
        set
        {
        title=value;
        }
        get
        {
         return title;
         }
    }在引用控件的页面:b.aspxprotected namespace.a mya;个属性赋值:
    mya.Title="刚才设置";这个时候,控件a.ascx的title的值也变成了“刚才设置”;注意两个变量title与Title的区别。
      

  6.   

    这个我知道,但这是自定义的属性。
    如果我的用户控件上面有一个LABEL,那么我在aspx上面要改变它的背景色,就必须在用户控件上面定义一个属性:
    public color BackColor
    {
        set
        {
        label1.backcolor=value;
        }
        get
        {
         return label1.backcolor;
         }
    }有没有无需定义这种属性而直接对其操作的办法呢?难道要把所有的外观属性都一一对应地写出自定义属性才行吗?