0

サーバー コントロールを動的に作成するには、ASP.NET で従来の Factory Method パターンを実装する必要があります。

.ascx コントロールを作成する唯一の方法は、Page/UserControl クラスの LoadControl メソッドを使用することです。しかし、ファクトリをページにリンクしたり、ページ パラメータをファクトリに渡したりするのは面倒です。

そのようなコントロールを作成する別の方法を知っている人はいますか (どこかで見落としていた静的メソッドなど)。

ありがとう。

4

2 に答える 2

1

最終的に、ページをパラメータとしてファクトリに渡すことにしました。ファクトリ メソッドの呼び出しを簡単にするために、ファクトリ クラスをシングルトンから共通クラスに変更し、ページをコンストラクタに渡しました。

public ControlsFactory
{
    private Page _containingPage;

    public ControlsFactory(Page containingPage)
    {
        _containingPage = containingPage;
    }

    public CustomControlClass GetControl(string type)
    {
        ... snip ...
        CustomControlClass result = (CustomControlClass)_containingPage.LoadControl(controlLocation);

        return result;
    }
}

ファクトリを使用して各ページで多くのコントロールをインスタンス化する必要があるため、おそらくこれがパターンを実装する最も簡潔で使いやすい方法です。

于 2008-11-10T19:23:43.523 に答える
0

リフレクターを開いた後は、Page で使用されている LoadControl 関数を任意の TemplateControl で使用できます。

実際の LoadControl 内では BuildManager の内部メソッドを使用しているため、リフレクションを使用せずに静的メソッドを使用する方法はないと思います。

少なくとも、ページを渡す必要はありません。TemplateControl をサブクラス化するとうまくいきます。

于 2008-11-10T18:17:12.533 に答える