0

我创建了一个用户控件,在我网站的每个页面上显示标题(不是 <head>,我的意思是标题、创建日期时间页面等等)。在该用户控件中,我也有一个链接。将在页面上显示的链接IF (user = admin)

目前这个链接是一个纯链接,我没有问题将“navigateUrl”更改为每个页面的正确值。(每个页面都包含这个用户控件,并且我从每个页面设置了 navigateUrl 的值。)

但!

在我的一些页面上,我使用链接按钮而不是超链接。但是我必须从 page.aspx 而不是 usercontrol.ascx 添加那个链接按钮

我的问题是,我想将用户控件中的超链接更改为链接按钮,以便可以使用该链接调用方法。(方法在 page.aspx 上,不在用户控件内)。

调用什么方法因页面而异,所以我想设置每次包含用户控件时调用哪个方法。

如果我有我的用户控制

<asp:LinkButton ID="LinkButton1" runat="server">LinkButton</asp:LinkButton>

现在我通过以下方式在用户控件中设置值:

 mainPageHeader1.headTitle = "text";

如何设置调用链接按钮的方法?

4

1 回答 1

1

更新

在 UserControl 的标记中,指定单击事件的处理程序

<asp:LinkButton OnClick="LinkButton1_Clicked" runat="server" ID="LinkButton1" />

在你的用户控件中声明一个自定义事件

public class MyUserControl
{
   public event System.EventHandler LinkButtonClicked;


   //add handler for your LinkButton
   protected void LinkButton1_Clicked(object sender, EventArgs e)
   {
      //Raise your custom event here that can be handled in any page that use your control
      LinkButtonClicked(sender, e);
   }
}

在您的 page.aspx 中,为您的自定义事件添加处理程序

protected void MyUserControl2_LinkButtonClicked(object sender, EventArgs e)
{
   //handle the event here
}

更新

在您添加控件的页面中,

<custom:MyUserControl ID="MyUserControl2" runat="server"     
                      LinkButtonClicked="MyUserControl_LinkButtonClicked" />

就这样

更新

在代码隐藏中订阅事件完成了这项工作。我还没有弄清楚为什么它不能从标记中工作。

从 UserControl 所在页面的 Page_Load 中,执行此操作

 MyUserControl2.LinkButtonClicked += new EventHandler(MyUserControl_LinkButtonClicked);

它应该可以工作。

检查事件是否已经订阅了代码隐藏(eventhandler += EventHandler(sender, e)或 aspx 标记OnClick="EventHandlerMethodName") -如果它没有订阅到某个地方,这将是 null

于 2013-01-15T22:05:59.803 回答