2011-02-03 12 views
0

これはthisに関連する可能性がありますが、残念ながら回避策はこのようには動作しません。IDをレンダリングしないカスタムコントロール内のLinkBut​​ton

大規模な実装ではうまくいきませんでしたが、私はそれを最も簡単なケースに煮詰めました。これは動作しません。レンダリング何

public class MyButton : Control 
    { 
     public MyButton() 
      : base() 
     { 
      LinkButton but = new LinkButton(); 
      but.CommandName = "test"; 
      but.CommandArgument = "test2"; 
      but.Text = "Click Here"; 
      Controls.Add(but); 
     } 
    } 

です:2つの大きな問題はここにあります

<a href="javascript:__doPostBack('ctl00$ctl11$ctl07','')">Click Here</a> 

。まず、IDはありません。タグid='ctl00$ctl11$ctl07'が必要です。たとえそれが投稿されても、イベントは決して捕らえられません。

第2に、CommandNameとCommandArgumentを無視しているので、とにかく__doPostBackWithOptionsをレンダリングする必要があります。

私は非常に愚かで、明らかに何かを見落としていますか、これはASP.NETの大きなバグですか?

私は多くの他のコントロールがControlまたはWebControlの内部にレンダリングされていたが、問題は一度もなかったので、複雑さよりもシンプルにする必要があります。

誰でも私がこれを解決するのを助けることができれば大いに感謝します。

答えて

0
+0

違いはありません。それは必要ない。 INamingContainerは、コンテナ内のユーザーが割り当てたIDの一意性を保証するだけです。これはリピーターではなく、独自のIDを割り当てません。 –

+0

私に言い換えれば、違いがあります。IDは、ページのコンテキストではなく、コントロールに使用したIDのコンテキストにあります。しかし、それはまだ動作しません、それはそれ自身のIDをレンダリングしないと、正しいポストバックのjavascriptをレンダリングしません。私はそれを試してみた(約百万の他のものの中で)。 –

+0

私のせいだ。私は実際にLinkBut​​tonの 'public class MyButton:LinkBut​​ton'を継承するか、' CompositeControl'からこのコントロールを継承し、LinkBut​​tonを設定する 'CreateChildControls'メソッドをオーバーライドする必要があると思います。ID –

0

があなたのボタンのIDプロパティを設定し実装する必要があるためです。

but.ID = "MyLinkButtonID"; 
but.Command += new CommandEventHandler(EVENTHANDLER); 

ボタンが常にクラスのメンバーである場合、ボタンをメンバとして追加し、OnInitイベントのControlsコレクションに追加します。

コマンドイベントのイベントハンドラを追加するのを忘れました。

+0

ええ、この単純なケースでは、コマンドイベントハンドラを置くのを忘れてしまいました。 IDを割り当てる必要はありませんが、私はポストバック用にレンダリングしているjavascriptを固定していると思いますが、リンクボタンのために必ず "withoptions"とは限りません。 WebControlを使用していましたが、Renderをオーバーライドしてラッパーを発行していないことが私の問題だと思っています。これは、命名コンテナがない場合、外部IDのコンテキストで使用されているため、命名コンテナがないと動作しません。とにかく - この例は実際に動作します。だから、どうやら私は非常に愚かです。 –

0

ARGH!私は自分自身を蹴っている、答えは実際には命名コンテナの問題です。これは、私ができることが、実際には問題ではなかった詳細に焦点を当てたものです。

私のカスタムコントロールは、別のコントロールによって放出されますが、まだ3番目のコントロールになります。しかし、「第3の制御」のいくつかの例があります。 (大きな絵は、フォームの前後にフォームコントロールボタンのコピーを置くことができるものを作っています。メインコントロールは、特定のフォームに対してどのボタンを表示するかを決定します)。

したがって、「第3の制御」は命名コンテナではありませんでした。そして、それはそれを殺していた。しかし、私はIDの競合に関して何の誤りもなく、それはうまく動作しませんでした。

関連する問題