我的 ASP.Net 网络表单包含许多文本框。我想将“onfocus”和“onmouseover”属性添加到所有文本框。我可以使用以下代码执行此操作:
TextBox1.Attributes.Add("onfocus", "javascript:this.select();");
TextBox1.Attributes.Add("onmouseover", "javascript:this.select();");
TextBox2.Attributes.Add("onfocus", "javascript:this.select();");
TextBox2.Attributes.Add("onmouseover", "javascript:this.select();");
TextBox3.Attributes.Add("onfocus", "javascript:this.select();");
TextBox3.Attributes.Add("onmouseover", "javascript:this.select();");
但是因为没有。 TextBoxes 超过 35 个,我正在考虑使用循环来实现。我尝试了以下代码:
if (!IsPostBack)
{
foreach (Control ctl in Controls)
{
if (ctl is TextBox)
ctl.Attributes.Add("onmouseover", "javascript:this.select();");
}
}
但是我收到以下错误:
'System.Web.UI.Control' 不包含 'Attributes' 的定义,也找不到接受类型为 'System.Web.UI.Control' 的第一个参数的扩展方法 'Attributes'(你错过了吗? using 指令还是程序集引用?)
我做错了什么?
最佳答案
您可以使用 Linq 的 OfType
.它返回给定类型的所有控件。
我建议将所有 TextBoxes
添加到容器控件中,例如 Panel
或 PlaceHolder
:
foreach(var txt in txtPanel.Controls.OfType<TextBox>())
{
txt.Attributes.Add("onfocus", "javascript:this.select();");
txt.Attributes.Add("onmouseover", "javascript:this.select();");
}
确保您已添加 using System.Linq
。
这是另一种类似的方法,它查看当前页面中的所有面板:
this.Form.Controls.OfType<Panel>()
.SelectMany(p => p.Controls.OfType<TextBox>());
foreach (TextBox txt in allTextBoxes){}
请注意,您还可以使用 Enumerable.Where
过滤 Panels
或 TextBoxes
(例如,如果面板的 ID 全部以 txtPanel_
开头)。
关于c# - 向多个文本框添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12424230/