我写信给你是因为我想了解正在发生的事情。
在我的代码中,我将控件动态添加到System.Web.UI.WebControls.GridView
(我对其进行了扩展)。在页面上进行一些操作后,我正在检查控件的 ID 是否Page.Request["__EVENTTARGET"]
是我之前在 ViewState 中保存的那个。
在 .Net 3.5 上一切正常,但是在将我的项目切换到 .Net 4 后,这不起作用,因为Page.Request["__EVENTTARGET"]
返回 Inherit ClientId,并且我在 ViewState 中只保留了我的控件的短 ID。我通过使用Page.FindControl
方法修复了它。它适用于 LinkButtons、Buttons 和 DropDowns,但不适用于 TextBoxes,因为Page.Request["__EVENTTARGET"]
返回我的 TextBox 的名称...
因此,我将 TextBox 的 ClientIdMode 更改为静态,例如'string$string'
. 但仍然Page.FindControl
返回null。我读过如果 TextBox 是动态生成的并且它嵌套在某些控件中,则此方法无法找到它。
我的第一个问题。为什么方法Page.FindControl
无法找到嵌套的 TextBox,但它可以处理其他控件,如 DropDown 或 LinkButton?
但我也处理这个问题。我写了递归的Page.FindControl
,我可以找到我的文本框。但是就在这个时候,我又遇到了一个问题。这个 TextBox 的值是旧的(我写了 6,但在 Text 属性中仍然是 1)。我的第一个想法是,这是因为我做得太早了——在OnPagePreLoad
方法上。
但是后来我将我的 TextBox 的 Id 从string$string
'string_string' 更改为它开始正常工作(我的文本框的值是我写的)。
这是我的第二个问题。为什么美元 ($) 符号是因为我看到了旧值?
谢谢 !!