将属性添加到多个文本框

时间:2012-09-14 12:07:23

标签: c# asp.net

我的ASP.Net webform包含许多文本框。我想在所有文本框中添加“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'的定义,并且没有扩展方法'Attributes'接受类型'System.Web.UI.Control'的第一个参数可以找到(你错过了吗?) using指令或程序集引用?)

我做错了什么?

4 个答案:

答案 0 :(得分:2)

你可以使用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_,则为此。)

答案 1 :(得分:1)

ctl对象只是一个webcontrol,虽然你正在检查它是一个TextBox,但在使用它之前你不会把它作为一个...

...试

if (!IsPostBack)
{
    foreach  (Control ctl in Controls)
    {
        if (ctl is TextBox)
               ((TextBox)ctl).Attributes.Add("onmouseover", "javascript:this.select();");
    }
}

答案 2 :(得分:1)

ctl的类型仍然是Control。为了使它成为TextBox,您可以像这样投射它:

((TextBox)ctl).Attributes.Add("onmouseover", "javascript:this.select();");

或使用as运算符:

(ctl as TextBox).Attributes.Add("onmouseover", "javascript:this.select();");

这两者之间的区别在于as如果演员表不成功将返回null引用,并且演员会抛出异常,但是因为你已经使用{{1}进行了检查操作员,只需使用看起来更好的那个 但是,如果您使用多个赋值,我会将强制转换提取为变量,如:

is

答案 3 :(得分:0)

您必须将其强制转换为TextBox。 ctl仍然是一个Control,它没有Attributes属性。

((TextBox)ctl).Attributes.Add("onmouseover", "javascript:this.select();");