0

Web サイトの各ページにヘッダー (< head > ではなく、タイトル、日時ページの作成など) を表示するユーザー コントロールを作成しました。そのユーザー コントロールには、リンクも 1 つあります。ページに表示されるリンクIF (user = admin)

現在、このリンクは純粋なリンクであり、「navigateUrl」を各ページの正しい値に変更するのに問題はありません。(各ページにはこのユーザー コントロールが含まれており、各ページから、navigateUrl の値を設定しています。)

しかし!

一部のページでは、ハイパーリンクの代わりにリンクボタンを使用しています。しかし、その後、usercontrol.ascx の代わりに page.aspx からそのリンクボタンを追加する必要があります。

私の問題は、代わりにユーザーコントロールのハイパーリンクをリンクボタンに変更したいので、そのリンクでメソッドを呼び出すことができるということです。(メソッドは、ユーザー コントロール内ではなく、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);

そしてそれはうまくいくはずです。

イベントが codebehind (eventhandler += EventHandler(sender, e)または aspx マークアップOnClick="EventHandlerMethodName")にサブスクライブされているかどうかを確認します。どこかにサブスクライブされていない場合、これは null になります。

于 2013-01-15T22:05:59.803 に答える