1

いくつかの webusercontrols ".ascx" があり、いくつかのコードを App_Code フォルダーの関数クラスに配置したいのですが、このコードを試すと、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というメッセージが表示され続けます。

 public static void Layout()
    {
    Page pg = (Page)HttpContext.Current.Handler;
    PlaceHolder PH = (PlaceHolder)pg.FindControl("PHolder");
}
4

2 に答える 2

0

例外ではなく null を取得している場合、それPageは適切に評価されていることを意味します。ただし、そうではないかもしれないものは

PlaceHolder PH = (PlaceHolder)pg.FindControl("PHolder");

PHolder コントロールが実際にページに属しているとは考えにくいです。ほとんどの場合、このコントロールは何らかの子コントロールに属しています。FindControl()メソッドは再帰関数ではありません。すぐに属するコントロール コレクションのみを検索します。これを機能させるには、この PHolder を見つけることが期待される実際の親コントロールを渡すか、System.Web.UI.Page (または使用している場合は基本クラス) の FindControl メソッドをオーバーロード/拡張する必要があります。再帰的であること。ただし、ページには多くのコントロールが含まれる可能性があり、この種の再帰は決定的に重くなる可能性があるため、この方法には注意してください。

PHolder コントロールがすべてのページで共通である場合、この PHolder オブジェクトへの参照を保持する基本クラスにプロパティを配置し、その方法でアクセスすることは悪い考えではありません。

于 2011-11-09T15:21:07.500 に答える
0

これが役立つかどうかはよくわかりませんが、aspxページで関数を呼び出すascxがあり、その関数は必要なことを何でも行います..

//ascx

protected void btnSave_Click(object sender, EventArgs e)
{
((aspxpage)this.Page).functionName();
}

//aspx

public void functionName()
{
//Call function in app_code class
}
于 2011-11-09T15:23:35.200 に答える