0

ユーザーコントロールにあるコントロールをループする際に問題が発生します。

次のコードを試しましたが、ユーザーコントロールにあるチェックボックスを見つけることができません。(私がコメントアウトした以前の試みのいくつかを見ることができます。)

    'For Each Ctrl As Control In Page.Controls
    'For Each Ctrl As Control In Me.Page.Controls
    'For Each ctrl As Control In Request.Form
     '''Dim frm As Control = Me.FindControl("frmDefault")
     '''For Each Ctrl As Control In frm.Controls

    Dim Check As CheckBox

    For Each Ctrl As Control In Me.Controls
        If TypeOf Ctrl Is CheckBox Then
            Check = Ctrl
            ' Do something here...
        End If
    Next

ユーザーコントロールには複数のchekcboxがあります。上記のコードは、ユーザーコントロールのコードビハインドページにあります。

(ユーザーコントロールは、私のCMSであるSitecoreと組み合わせて使用​​されています。これが、発生している問題に影響を与えるかどうかはわかりません。)

助言がありますか?

4

5 に答える 5

0

私はついに何が起こっているのかを理解しました。

別のテーブル内にチェックボックスがあります。これらのテーブルにはrunat="server"が含まれています。このテーブルは、 runat="server"も含むDivタグ内にあります。

このため、コードでチェックボックスを見つけることができませんでした。DivタグをループするForEachを追加して、適切なテーブルを見つける必要がありまし。次に、チェックボックスを見つけるためにテーブルをループする必要がありました。

于 2013-02-13T19:59:15.843 に答える
0

一部のコントロールにはコントロールがあります。ループはそれらのコントロールを無視します。すべてのコントロールを取得するために使用する拡張メソッドがいくつかあります(呼び出し元のコードでタイプチェックを実行する必要がないように、タイプCheckBoxを指定できます)

<Extension()> _
Public Function ChildControls(ByVal parent As Control) As List(Of Control)
    Return ChildControls(Of Control)(parent)
End Function

<Extension()> _
Public Function ChildControls(Of T As Control)(ByVal parent As Control) As List(Of T)
    Dim result As New ArrayList()
    For Each ctrl As Control In parent.Controls
        If TypeOf ctrl Is T Then result.Add(ctrl)
        result.AddRange(ChildControls(Of T)(ctrl))
    Next
    Return result.ToArray().Select(Of T)(Function(arg1) CType(arg1, T)).ToList()
End Function
于 2013-02-13T20:41:22.503 に答える
0

Sitecoreは、コントロールコレクションのウォークスルーに影響を与えません。これは可能であるはずです。

適切なControl-Collectionをループしていますか?Me.Controlsは、Page-、UserControl-、またはRepeaterItems-Controlコレクション(または別のコレクション)ですか?チェックボックスが別のコントロールにネストされている場合は、そのコントロールコレクションに移動する必要があります。

コントロールコレクションがどのように見えるかを確認できるように、.ascxコードを追加する必要があるかもしれません。

于 2013-02-13T19:41:58.500 に答える
0

これにより、チェックボックスの名前が表示されますか?

For Each Ctrl As Control In Me.Controls
    If TypeOf Ctrl Is CheckBox Then
          MsgBox(Ctrl.Name)
    End If
Next

チェックボックスを押しているかどうかがわかります。そうでない場合は、ページのデザインを再検討してください。

ctrlをチェックに割り当てるのに問題はないはずです。ctrlへのポインタとして機能するはずです。ページに複数のチェックボックスがある場合は、ctrl.nameに対してifステートメントを実行して、正しいチェックボックスを取得します。

于 2013-02-13T19:45:34.877 に答える
0

さて、次のように解決しました。(c#)

 foreach (Control c in Page.Controls)
        {
            foreach (Control childc in c.Controls)
            {
                if (childc.ClientID == "menupadraolateral1")
                {
                    foreach (Control cMnuLat in childc.Controls)
                    {

                        //here you can access the controls of usercontrol                           

                    }


                }
            }
        }

ここで、「menupadraolateral1」は、ユーザーコントロールが呼び出される場所で使用されるIDです。

私は助けてくれたと思います

于 2016-11-18T02:54:17.190 に答える