当 $ 符号位于 ASP 文本框的 ID 中时,FindControl 方法返回 null
本文关键字:中时 ID FindControl 方法 null 返回 符号 文本 ASP | 更新日期: 2023-09-27 18:31:54
我写信给你是因为我想了解发生了什么。
在我的代码中,我将控件动态添加到System.Web.UI.WebControls.GridView
(我扩展了它)。在页面上执行一些操作后,我正在检查 Page.Request["__EVENTTARGET"]
中的控件的 ID 是否是我之前保存在 ViewState 中的 ID。
在 .Net 3.5 上一切正常,但是将我的项目切换到 .Net 4 后,这不起作用,因为Page.Request["__EVENTTARGET"]
返回继承 ClientId,并且我在 ViewState 中只保留了我的控件的短 ID。我使用Page.FindControl
方法修复了它。它适用于链接按钮,按钮和下拉列表,但不适用于文本框,因为Page.Request["__EVENTTARGET"]
返回我的文本框的名称...
所以我将文本框的客户端 IdMode 更改为静态,就像 'string$string'
一样。但仍然Page.FindControl
返回为空。我读过,如果 TextBox 是动态生成的并且它嵌套在某些控件中,则此方法无法找到它。
我的第一个问题。为什么方法 Page.FindControl
无法找到嵌套的文本框,但它可以处理其他控件(如下拉列表或链接按钮)?
但我也会处理这个问题。我写了递归类型的Page.FindControl
,我可以找到我的文本框。但在这一刻,我又遇到了一个问题。这个文本框的值是旧的(我写了 6,但在 Text 属性中仍然有 1)。我的第一个想法是,这是因为我做得太早了 - 以OnPagePreLoad
方法。
但是后来我将文本框的 Id 从 string$string
更改为"string_string",它开始正常工作(我的文本框的值是我写的)。
这是我的第二个问题。为什么美元($)符号,因为我看到了旧值?
谢谢!!
$
字符在 ID 属性中无效。 有关详细信息,请参阅此Microsoft文章
具体说来
只有字母数字字符和下划线字符 (_) 的组合才是此属性的有效值。 包含空格或其他无效字符将导致 ASP.NET 页面分析器错误。
另请参阅这篇关于 IdSeparator
属性Microsoft文章。
具体说来:
此 API 支持 .NET Framework 基础结构,不应直接在代码中使用。
因此,用下划线替换$
似乎是正确的答案。