これはthisに関連する可能性がありますが、残念ながら回避策はこのようには動作しません。IDをレンダリングしないカスタムコントロール内のLinkButton
大規模な実装ではうまくいきませんでしたが、私はそれを最も簡単なケースに煮詰めました。これは動作しません。レンダリング何
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
の内部にレンダリングされていたが、問題は一度もなかったので、複雑さよりもシンプルにする必要があります。
誰でも私がこれを解決するのを助けることができれば大いに感謝します。
違いはありません。それは必要ない。 INamingContainerは、コンテナ内のユーザーが割り当てたIDの一意性を保証するだけです。これはリピーターではなく、独自のIDを割り当てません。 –
私に言い換えれば、違いがあります。IDは、ページのコンテキストではなく、コントロールに使用したIDのコンテキストにあります。しかし、それはまだ動作しません、それはそれ自身のIDをレンダリングしないと、正しいポストバックのjavascriptをレンダリングしません。私はそれを試してみた(約百万の他のものの中で)。 –
私のせいだ。私は実際にLinkButtonの 'public class MyButton:LinkButton'を継承するか、' CompositeControl'からこのコントロールを継承し、LinkButtonを設定する 'CreateChildControls'メソッドをオーバーライドする必要があると思います。ID –