【问题标题】:How to access usercontrol id from the aspx page?如何从 aspx 页面访问 usercontrol id?
【发布时间】:2014-07-15 11:37:52
【问题描述】:

我有一个如下所示的用户控件。

public partial class lcont : System.Web.UI.UserControl
{
  public delegate void mydel(string str);

  protected void Page_Load(object sender, EventArgs e)
  {
  }
  public event mydel myevent;

  public void butt_click(object sender, EventArgs e)
  {

    if (myevent != null)
    {
        myevent(tv.SelectedNode.Value);
    }  
  }
}

还有一个test.aspx,它使用了上面的usercontrol。

<body>
 <form id="form1" runat="server">
 <uc1:lcont ID="lcont1" runat="server" />
 <div>
 <asp:Label ID ='lbl' runat="server" Text ="lbl"  />
 </div>
 </form>
</body>

它的代码隐藏是:

protected void Page_Load(object sender, EventArgs e)
{

   lcont1.myevent += delegate(string st)
    {
        lbl.Text = st;
    };

}

正如您在此处看到的,我可以调用“lcont1”,它是 aspx 文件代码隐藏中 usercontrol 的 ID。

现在的问题是:我想做同样的事情,但这次使用的 aspx 文件没有直接实现用户控件,但继承了已实现用户控件的母版页。

换句话说,用户控件是在母版页中实现的,母版页是由aspx页面实现的。现在我想像上面的例子一样访问aspx页面中的usercontrol id。请帮助!

【问题讨论】:

    标签: c# asp.net user-controls


    【解决方案1】:

    我会这样做......

    在您的MasterPage 中创建一个公开UserControl 的公共函数/属性

    public lcont GetLcont1()
    {
       return lcont1;
    }
    

    然后在您的.aspx 中,您可以投射MasterPage

    MyMasterPage myMaster = (MyMasterPage)Page.Master;
    

    现在你应该可以得到你的UserControl 并用它做你需要的事情

    lcont lcont1 = myMaster.GetLcont1();
    lcont1.doSomething();
    

    更新

    由于 OP 需要用勺子喂食,这里是 .aspx 页面的代码隐藏...

    protected void Page_Load(object sender, EventArgs e)
    {
      // Note: replace "MyMasterPage" with the name of your master page class
      MyMasterPage myMaster = (MyMasterPage)Page.Master;
      lcont lcont1 = myMaster.GetLcont1();
      lcont1.myevent += delegate(string st)
      ...
    }
    

    【讨论】:

    • 函数 GetLcont1() 是否返回用户控件的实际 ID?因为我需要访问 usercontrol 的实际 id。
    • 如果您阅读代码,您会发现它是正在返回的控件实例...我真的不需要告诉您。如果您需要客户端 ID,请使用 lcont1.ClientID 而不是 lcont1.doSomething();
    • 我需要做的就像问题中给出的代码的代码隐藏。问题中的最后一段代码。
    • 这样更好吗...或者您希望我为您编写整个项目?
    • 我做了同样的事情hfm mymaster = (hfm)Page.Master; lcont lcont1 =mymaster.getlcont(); lcont1.myevent += delegate(string st) { slbl.Text = st; }; 但它不起作用..标签应该是改变但它保持不变。所以我在问你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    相关资源
    最近更新 更多