3

別のユーザー コントロールに追加されるユーザー コントロールがあります。入れ子になったユーザー コントロールは、GridView、イメージ ボタン、およびリンク ボタンで構成されます。入れ子になったユーザー コントロールは、GridView にバインドされた結果に基づいて、コレクション オブジェクトとして外側のコントロールに追加されます。

私が抱えている問題は、リンク ボタンが機能しないことです。クリックしてもイベントが発生しません。ブレークポイントを追加しても到達しませんでした。ネストされたユーザー コントロールが何度も追加されるので、画像ボタンに一意の ID とリンク ボタンを設定しました。画像ボタンは JavaScript で正しく動作します。リンク ボタンは、コード ビハインドでイベントを発生させる必要がありますが、あらゆる努力にもかかわらず、機能させることができません。リンクボタンをコントロールに動的に追加しています。以下は、私が使用している関連コードです。

public partial class ucCustomerDetails : System.Web.UI.UserControl
{
public event EventHandler ViewAllClicked;

protected override void CreateChildControls( )
{
   base.CreateChildControls( );

   string strUniqueID = lnkShowAllCust.UniqueID;
   strUniqueID = strUniqueID.Replace('$','_');
   this.lnkShowAllCust.ID = strUniqueID;
   this.lnkShowAllCust.Click += new EventHandler(this.lnkShowAllCust_Click);
   this.Controls.Add(lnkShowAllCust);
}

protected override void OnInit (EventArgs e)
{
   CreateChildControls( );
   base.OnInit(e);
}

protected override void OnLoad(EventArgs e)
{
   base.EnsureChildControls( );
}

protected void Page_Load(object sender, EventArgs e)
{
   if (IsPostBack)
   {
   CreateChildControls( );
   }
}

protected void lnkShowAllCust_Click(object sender, EventArgs e)
{
   this.OnCustShowAllClicked(new EventArgs ( ));
}

protected virtual void OnCustShowAllClicked(EventArgs args)
{
   if (this.ViewAllClicked != null)
   {
      this.ViewAllClicked(this, args);
   }
}    
}

私は過去 3 日間、この問題に苦労してきましたが、うまくいきませんでした。本当に助けが必要です。

誰でも私を助けてもらえますか?

4

5 に答える 5

2

LinkBut​​tonがClickイベントを発生させていませんでした。その理由は、CausesValidationプロパティがTrueに設定されていたためです。リンクでフォームを検証したくない場合は、必ずこれをFalseに設定してください。

于 2012-08-16T06:12:01.617 に答える
1

クリック イベントを linkbutton タグに追加してみてください。

<asp:LinkButton runat="server" OnClick="linkShowAllCust_Click" />

または、Page_Load に追加します。

Page_Load(object sender, EventArgs e) 
{
  this.lnkShowAllCust.Click += new EventHandler(this.lnkShowAllCust_Click);
}
于 2010-02-06T10:32:38.010 に答える
0

ユーザーコントロールはグリッドビュー内にありますか?その場合は、gridviewのonrowcreatedイベントにイベントハンドラーを登録します。

于 2010-02-06T13:34:49.920 に答える
0

ビューステートに問題があるようです。ビューステートがロードされたときにコントロールがそこにないため、アプリケーションは発生するイベントをフックする方法を知りません。これを回避する方法は次のとおりです。

loadviewstateevent が発生した直後にコントロール ツリーをロードすることで、実際にアプリを正常に動作させることができます。loadviewstate イベントをオーバーライドし、mybase.loadviewstate を呼び出して、その直後にコントロールを再生成する独自のコードを配置すると、これらのコントロールの値がページの読み込み時に利用可能になります。私のアプリの 1 つで、viewstate フィールドを使用して、これらのコントロールを再作成するために使用できる ID または配列情報を保持しています。

Protected Overrides Sub LoadViewState(ByVal savedState As Object)
    MyBase.LoadViewState(savedState)
    If IsPostBack Then
        CreateMyControls()
    End If
End Sub
于 2010-02-06T19:13:45.467 に答える