0

次のようなマークアップを使用してカスタムコントロールを作成しています。

<Custom:CustomGrid>
    <Columns>
        <Custom:DataColumn HeaderText="FirstName" />
        <Custom:DataColumn HeaderText="LastName" />
    </Columns>
</Custom:CustomGrid>

外側のDiv/TableタグとColumnタグをそれぞれレンダリングするために、RenderとRenderChildrenの両方をオーバーライドしています。

各THに、並べ替え用のLinkBut​​tonを含めたいと思いますHeaderText。列のコレクションを実行するループを作成foreachし、その中にLinkBut​​tonを含む各列のTHを作成しました。LinkBut​​tonを使用してレンダリングしますlinkBtn.RenderControl(writer);

私がhtmlで取得するのは、空のアンカータグです。これは、asp.netがこのようにレンダリングされたときにサーバーコントロールのJS側をレンダリングすることを認識していないためだと思います。しかし、私は自分がこれまでとは違う方法で何ができるのかわかりません。何か案は?

編集: href = "javascript:_doPostBack('myGrid $ Sort_firstName'、'')"が作成されていることがわかります。なぜ文字がhtmlエスケープされているのかはわかりませんが、それはhtmlソースビューアだけだと思います(またはそうではないかもしれません...)とにかく、イベントハンドラはまだ起動されていません。

4

1 に答える 1

0

CreateChildControlsは、子コントロールを作成する場所ではないことがわかりました...(誰がそれをサンクするのか...)

コントロールコレクションにコントロールを追加するコードをOnInitに移動すると、すべてが正しく処理されました。

CreateChildControlsの呼び出しがライフサイクルの後半であるため、ポストバックでイベントを正しくルーティングできないことがわかりました。

于 2012-11-22T18:52:19.540 に答える