gpt4 book ai didi

c# - FindControl 不适用于绑定(bind)服务器标签,为什么?

转载 作者:太空宇宙 更新时间:2023-11-03 11:55:02 26 4
gpt4 key购买 nike

我在 OnLoad 事件中有一个 FindControl 来在页面上找到我的按钮,即:

protected override void OnLoad(EventArgs e)
{
DataBind();
control button = Page.FindControl("myButton");
}

在我的 aspx 页面上有

<asp:Button runat="server" ID="myButton" />

如果我只有这个,一切正常,当我传入 OnLoad 时,按钮不为空,我可以执行我想要的。问题是当我在我的 aspx 中添加动态文本时:

<asp:Button runat="server" ID="myButton" Text='<%# "Here is my dynamic text pulled from a XML" %>' />

然后 FindControl 什么也没找到,按钮为空。

在 aspx 上添加绑定(bind)服务器标签不会延迟任何事情吧?当我检查 Page 对象时,我在 Controls 集合中有一些控件,但找不到 myButton。

知道我做错了什么吗?

编辑

人们似乎认为我的代码示例是我的真实代码,但它不是,所以我使用 FindControl,因为我需要使用 FindControl,因为我有嵌套控件,我无法直接访问它,所以我使用绑定(bind),因为我要放置的动态文本位于 ContentTemplate 中,我可以在其他页面 aspx 中覆盖它。

我问的问题更具体是因为我已经追踪到我的 FindControl 返回 null 的问题,因为新实现的行为是绑定(bind)。

改进代码示例不是解决方案,也不是对以下事实的解释:如果我在我的 aspx 页面中放置 <%# %> 标记,OnLoad 事件中的 FindControl 将返回 null。

编辑 2

单独的绑定(bind)标签似乎不是罪魁祸首,而是用来填充它们的 DataBind()。无论我是否有绑定(bind)标签,将 DataBind() 放在 FindControl 之前都会使 myButton 为空。对代码示例进行了更正。

最佳答案

In here MSDN 说:

PreRender : Each data bound control whose DataSourceID property is set calls its DataBind method.

看起来您没有使用数据绑定(bind)控件的 DataSourceID,但将 FindControl 代码移动到 PreRender 事件可能会有所帮助。

关于c# - FindControl 不适用于绑定(bind)服务器标签,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/769396/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com