0

私のページにはこれらのコントロールが 11 個あり、すべてチェックボックスです。これは、マスター ページに含まれています。

私は次のようにやりたいことを達成できます:

generalInformation.InputAttributes.Add( "class", "SetupChecklist" );
generalInformation2.InputAttributes.Add( "class", "SetupChecklist" );
generalInformation3.InputAttributes.Add( "class", "SetupChecklist" );

等..

私は今、これらをループして、コードを節約するために同じことをしようとしていますが、これを適切に機能させるのに多くの問題があり、まったく機能しません。

これらの 11 個のチェックボックス コントロールをループして css クラス SetupChecklist を追加する良い方法を誰か教えてもらえますか?

私はこれを試しましたが、何らかの理由でクラスを追加していません。

protected void InitializeCheckboxes ()
    {
        //generalInformation.InputAttributes.Add( "class", "SetupChecklist" );
        var allCheckBoxes = Page.Controls.OfType<CheckBox>();
        foreach ( var c in allCheckBoxes )
        {
            c.InputAttributes.Add( "class", "SetupChecklist" );
        } 
    }

InitializeCheckboxes();Page_Load メソッドを呼び出します。generalInformation.InputAttribues.Add などを使用するだけで機能しますが、それらをループするときは機能しません。助言がありますか?

4

4 に答える 4

3

最良の方法は、Panel(div としてレンダリングされる) または他のコンテナー コントロールに配置することです。次に、LINQ で参照を取得できますOfType

// assuming all checkboxes are in a panel named "SetupContainer"
var allCheckBoxes = SetupContainer.Controls.OfType<CheckBox>();
foreach(var chb in allCheckBoxes)
    chb.InputAttributes.Add( "class", "SetupChecklist" );

もちろん、これを使用してページ全体のすべての CheckBoxes を見つけることもできますが、エラーが発生しやすい可能性があります。

于 2012-04-18T15:51:44.627 に答える
1

テストされていませんが、あなたを助けるかもしれません..

foreach(Control oControl in Page.Controls)
{
  if(oControl is CheckBox && ((CheckBox)oControl).ID.StartsWith("generalInformation") )
   ((CheckBox)oControl).InputAttributes.Add( "class", "SetupChecklist" );
}
于 2012-04-18T15:51:37.060 に答える
1

により、チェックボックスは以下のようにレンダリングされrunat = "server"ます。

<span class="SetupChecklist" class="SetupChecklist" name="generalInformation">
     <input id="generalInformation" type="checkbox" name="generalInformation" />
</span>

JQuery

<script type="text/javascript" language="javascript" src="Scripts/jquery-1.4.1.min.js"></script>
<script type="text/javascript" language="javascript" src="Scripts/jquery-1.4.1.js"></script>
<script language="javascript" type="text/javascript">
    $(document).ready(function () {
        $(this).find("input[type='checkbox']").addClass('GuestClass');
    });
</script>

これにより、以下の手順の時間を節約できます。

  1. クライアントから
  2. IIS Web サーバー
  3. ISAPI 拡張機能
  4. ISAPI 拡張機能は、aspx を HTML にロード/実行/変換します
  5. IIS Web サーバーに送り返します。
  6. IIS がクライアントに応答する
于 2012-04-18T15:58:07.960 に答える
0
public void GetUserControls(ControlCollection controls)
{
    foreach (Control ctl in controls)
    {
        if (ctl is CheckBoxOrWhateverControlTypeYouWant)
        {
             /// Add attribute
        }

        if (ctl.Controls.Count > 0)
            GetUserControls(ctl.Controls);
    }
}
于 2012-04-18T15:51:18.310 に答える