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循环来运行列集合,并为每个列创建一个 TH,其中包含一个 LinkBut​​ton。我使用渲染出 LinkBut​​tonlinkBtn.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 回答