1

Page_Load ですべての RadioButtonLists を非表示にしようとしていますが、構文が正しくないようです

FindControlこのような構文を使用する必要があると思います

CType(FindControl, RadioButtonList)

そして、各 RadioButtonList をループしてVisible = False属性を設定する必要があると思います。

上記のコードでエラーが発生しているようです。

私が試すことができるアイデアはありますか?

ありがとう

4

4 に答える 4

3

これを試して:

protected void Page_Load(object sender, EventArgs e)
{
    HideRadioButtonLists(Page.Controls);
}

private void HideRadioButtonLists(ControlCollection controls)
{
    foreach (WebControl control in controls.OfType<WebControl>())
    {
        if (control is RadioButtonList)
            control.Visible = false;
        else if (control.HasControls())
            HideRadioButtonLists(control.Controls);
    }
}
于 2011-02-04T14:26:36.767 に答える
1

FindControlは、探しているコントロールの名前がわかっている場合にのみ機能し、それ以上は再帰呼び出しではありません。あなたのコントロールがあなたが探している特定のコンテナにあることを保証できない限り、あなたはそれを見つけることができません。すべてのラジオボタンリストを検索する場合は、親子関係のすべてのコントロールセットを循環し、ラジオボタンリストをfalseに設定するメソッドを作成する必要があります。

この関数に渡すだけPage.Controlsです(テストされていない、微調整が必​​要な場合があります):

public void HideRadioButtonLists(System.Web.UI.ControlCollection controls)
{
    foreach(Control ctrl in controls)
    {
        if(ctrl.Controls.Count > 0) HideRadioButtonLists(ctrl.Controls);
        if("RadioButtonList".Equals(ctrl.GetType().Name, StringComparison.OrdinalIgnoreCase))
            ((RadioButtonList)ctrl).Visible = false;
    }
}
于 2011-02-04T14:16:38.720 に答える
0

Controlsプロパティでforeachを実行し、タイプをチェックするのは遅くなります。私の意見では、要件に応じて、CSS /スキンを使用して不要なボタンを非表示にするか、単にボタンを追加して、List<T>変更が必要なボタンのみをループできるようにする必要があります。

最悪のシナリオでは、foreachは機能しますが、少し遅く、望ましくありません。

于 2011-02-04T14:31:19.027 に答える
0

ASP.Net スキン ページを使用して、すべての RadioButtonLists のデフォルト値を visible = false に設定しないでください。

ここでスキンページを使用することを検討します。

于 2011-02-04T14:08:26.190 に答える