2

ユーザーの資格情報に応じて、別の UserControl (ascx) をロードする UserControl (ascx) があります。現在読み込まれるコントロールには、特別なナビゲーション メニューが含まれています。

私はこのコードを使用しています:

UserControl jmNav = 
    (UserControl)Page.LoadControl("~/controls/client/jmNavigation.ascx");

次に、さらにコードを追加した後、次のようにロードするように指示します。

    SBarTopWelcome.Controls.Add(jmNav);

問題は、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが発生することです。

はい、パスは正しいです-私もこのように試しました(すべてのバリエーションで):

UserControl jmNav = (UserControl)Page.LoadControl("/client/jmNavigation.ascx");

これ(およびその亜種)は、存在しないことを示しています。

そう!何かご意見は?

4

3 に答える 3

1

役立つ解決策の 1 つは<%@ Register %>、親コントロールに追加することです。はい、それがあなたの親ページにあることは知っていますが、あなたの管理下にもあるはずです。

これを行うと、コントロールを厳密に型指定できるようになります。たとえば、クラス名が のコントロールは次のMyControlようになります。

MyControl controlVar = (MyControl)this.LoadControl("MyControl.aspx");

stronly で定義された変数を取得できれば、問題はありません。

于 2013-02-19T21:04:39.513 に答える
1

はっ!私はそのようなDORKです!次のようなコントロール内で「SideBarWelcome」を宣言していました。

public Control sideBarTopWelcome
{
    get { return Page.FindControl("SideBarTopWelcome"); }
}

私がこのようにすべきだったとき:

public Control sideBarTopWelcome
{
    get { return FindControl("SideBarTopWelcome"); }
}

なしPage。とにかくありがとう、みんな。それは有り難いです。

于 2013-02-19T22:24:35.507 に答える
1

SideBar.ascx内に、 SideBarTopWelcomePlaceHolderという名前のプレース ホルダーを追加します。

<asp:PlaceHolder ID="SideBarTopWelcomePlaceHolder" runat="server"/>

次に、このようにjmNavigation UserControl をSideBarTopWelcomePlaceHolderにロードします。

Control jmNav = 
    Control Page.LoadControl("~/controls/client/jmNavigation.ascx");
SideBarTopWelcomePlaceHolder.Add(jmNav);
于 2013-02-19T21:06:58.997 に答える