【发布时间】:2015-07-16 15:26:15
【问题描述】:
我有很多带有很多控件的 .aspx 页面。这些控件都以类似的方式声明:
<input type="text" runat="server" id="txtLatitude" />
现在我必须检查用户是谁,如果不允许进行更改,请将所有这些控件设为只读。通常我会做一些像
txtLatitude.Attributes.Add("readonly", "readonly")
但我需要永远手动为每个页面中的每个控件执行此操作。我想知道是否有一种方法可以使用 runat="server" 获取列表或所有控件的内容。 我尝试使用
ControlCollection myControls = Page.Controls
得到它们,但我在调试模式下查看了 myControls,它似乎得到了少量控件,可能只有用 asp 特定符号声明的控件 ,不确定。
使用上述列表,我只需执行一个 foreach 循环并为每个循环添加 readonly 属性,只需几行代码。想法? (或者也许我只是愚蠢,无法以正确的方式导航和搜索 myControls =D)
【问题讨论】:
-
你在递归函数中尝试过 FindControl 吗?
-
@FranciscoGoldenstein 我还没有意识到这一点......但是我应该如何管理该方法所需的 id 参数?您是否建议尝试输入所有可能的 id?我可以通过添加不同的前缀来优化它,但它似乎很耗费资源。
-
@RobertMcKee 我尝试了该解决方案,但我认为它不起作用
-
请注意,要让 ASP.NET Web 表单识别控制服务器端,它必须具有
runat="server"。如果内存服务正确,则客户端 ID 位于ClientID属性中。