c# - 向多个文本框添加属性

标签 c# asp.net

我的 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 添加到容器控件中,例如 PanelPlaceHolder:

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 过滤 PanelsTextBoxes (例如,如果面板的 ID 全部以 txtPanel_ 开头)。

关于c# - 向多个文本框添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12424230/

相关文章:

c# - "x"按钮如何工作以及如何覆盖它?

c# - 使用 TFS 2015 Build vNext 的发布管理 2015

c# - 过滤项目来源

c# - 如何将 C# 字符串转换为 Span<char>? (跨度<T>)

c# - 从 JavaScript 调用用户定义的函数

c# - 如何在 Asp.Net 的服务器端使用 JavaScript 对象?

c# - Case 语句中的 Linq 表达式

c# - Visual Studio 2013,调试中未显示更改

c# - 如何从 formView->EditItemTemplate->Textbox 中获取值?

c# - 如何从 html 页面后面的代码中读取值?或者有更好的方法吗?