从另一个命名空间中的页面访问用户控件

时间:2013-04-11 11:01:22

标签: c# asp.net oop

我的问题看似简单,但我无法找到解决方案。

我有一个aspx如下:

namespace WebApplication3.asp_x
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
    }
}

和ascx如下:

namespace WebApplication3.asc_x
{
    public partial class WebUserControl1 : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        public LinkButton lbTest
        {
            get {
                return this.lbTest;
            }
        }
    }
}

从aspx文件中,我想访问公共属性lbTest并执行以下操作,但它不起作用(它不会编译)

namespace WebApplication3.asp_x
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            LinkButton lb = WebApplication3.asc_x.WebUserControl1.lbTest;
        }
    }
}

谁能告诉我这里缺少什么?

3 个答案:

答案 0 :(得分:0)

使用usercontrol的 ID 访问任何媒体资源。
给定的ID实际上是代码隐藏中的 usercontrol的实例名称

它不是像WebApplication3.asc_x.WebUserControl1.lbTest

那样访问的静态属性

答案 1 :(得分:0)

我认为这是一个奇怪的召唤

LinkButton lb = WebApplication3.asc_x.WebUserControl1.lbTest;

因为您需要一个实例来调用它的标签。

如果您在页面上有usercontrol的实例,那么您可以将其称为公共财产。

namespace WebApplication3.asp_x
{
   public partial class _Default : System.Web.UI.Page
   {
      protected void Page_Load(object sender, EventArgs e)
      {
        WebApplication3.asc_x.WebUserControl1 ob=new WebApplication3.asc_x.WebUserControl1();
        LinkButton lb = ob.lbTest;
      }
   }
}

编辑1

您需要先找到placeholer第一个 然后找到user-control到位的装置 然后找到链接按钮。

假设您的页面中有占位符p1 找到如下

PlaceHolder p=(PlaceHolder)Page.FindControl('p1');   

然后在占位符p内找到用户控件,如下所示
假设您在占位符中拥有用户控件uc1

UserContro1 uc1=(UserControl1)p.FindControl("uc1");

然后你可以找到这个内部的链接 就这样

LinkButton lb = uc1.lbTest;

答案 2 :(得分:0)

您必须实例化(创建一个新的对象)用户控件。

示例:

LinkButton lb = (new WebApplication3.asc_x.WebUserControl1()).lbTest;

或类似的东西。 除非它已经是您页面上的控件;然后只需使用服务器ID。