1

私のASP.NetWebフォームには、いくつかのテキストボックスが含まれています。すべてのテキストボックスに「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();");

しかし、いいえ以来。TextBoxの数は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ディレクティブがありませんか?またはアセンブリリファレンス?)

私は何が間違っているのですか?

4

4 に答える 4

2

Linqのを使用できますOfType。指定されたタイプのすべてのコントロールを返します。

すべてをコンテナコントロールに追加することをお勧めします。TextBoxesたとえば、aPanelまたは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){}

PanelsまたはTextBoxesでフィルタリングすることもできることに注意してくださいEnumerable.Where(パネルのIDがすべてで始まる場合はfe txtPanel_)。

于 2012-09-14T12:12:05.450 に答える
1

ctlオブジェクトは単なるWebコントロールであり、TextBoxであることを確認していますが、使用する前に1つとしてキャストしていません...

試す...

if (!IsPostBack)
{
    foreach  (Control ctl in Controls)
    {
        if (ctl is TextBox)
               ((TextBox)ctl).Attributes.Add("onmouseover", "javascript:this.select();");
    }
}
于 2012-09-14T12:10:00.890 に答える
1

ctlのタイプは引き続きControlです。TextBoxにするために、次のようにキャストできます。

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

またはas演算子を使用します:

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

これら2つの違いは、キャストが成功しなかった場合は参照asを返し、キャストは例外をスローすることですが、既に演算子を使用してチェックしているため、見栄えの良いものを使用してください。 ただし、複数の割り当てを使用する場合は、次のようにキャストを変数に抽出します。nullis

if (ctl is TextBox)
{
  TextBox textBox = (TextBox) ctl;
  textBox.Attributes.Add("onmouseover", "javascript:this.select();")
  .....
}
于 2012-09-14T12:10:04.767 に答える
0

それをTextBoxにキャストする必要があります。ctlは引き続きコントロールであり、Attributesプロパティはありません。

((TextBox)ctl).Attributes.Add("onmouseover", "javascript:this.select();");
于 2012-09-14T12:10:09.110 に答える