0

これはこれに関連している可能性があると思いますが、残念ながらこの場合、回避策は機能しないようです。

より大きな実装が機能しないことに苦労した後、私はそれを最も単純なケースに要約しました。これは動作しません。

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

レンダリングされるものは次のとおりです。

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

ここには2つの大きな問題があります。まず、IDがありません。タグが必要id='ctl00$ctl11$ctl07'です。そのため、投稿されても、イベントがキャプチャされることはありません。

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

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

私はこれまで何度もこれを行ってきましたが、Controlまたはの内部に他の多くのコントロールがレンダリングされWebControlていて、問題が発生したことはありませんでした。したがって、複雑さではなく単純さに関係しているに違いありません。

誰かが私がこれを解決するのを手伝ってくれるなら、それは大いにありがたいです。

4

3 に答える 3

0

これは、 INamingContainerインターフェイスを実装する必要があるためです

于 2011-02-03T18:36:14.213 に答える
0

ボタンのIDプロパティを設定します。

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

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

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

于 2011-02-03T18:47:14.287 に答える
0

ARGH!私は自分自身を蹴っています、答えは実際にはネーミングコンテナの問題です。これは、私ができることは細部に焦点を当てることだけであった状況の1つでしたが、実際には問題ではありませんでした。

私のカスタムコントロールは、別のコントロールによって放出されます...さらに3番目のコントロールになります。ただし、「サードコントロール」にはいくつかの例があります。(全体像は、フォームの前後にフォームコントロールボタンのコピーを配置できるようにするものを作成しています。メインコントロールは、特定のフォームに対してどのボタンを出力するかを決定します。)

したがって、「3番目のコントロール」はネーミングコンテナではありませんでした。そしてそれはそれを殺していました。しかし、IDの競合に関するエラーは発生しませんでした。それは、機能しませんでした。

于 2011-02-03T19:21:35.063 に答える