0

ASP.NET で動的にページを作成しています。フォーム内にコントロールをロードしたいのですが、Page.Form.Controls に追加しようとするたびに、フォームが null になり、NullReference が出力されます。

Page myPage = new Page();
FormAtt ctrl = (FormAtt)myPage.LoadControl("path/to/my/file.ascx");
myPage.Form.Controls.Add(ctrl);

これを実行しようとしているのは、コントロール内のイベントとロジックを起動しながら、コントロール HTML を解析して文字列に変換し、(本当に悪い設計の) 文字列を HTML コードで埋める必要がctrl.RenderControl(HtmlWriter)あるためです。レンダリングされず、イベントが発生していないように見えます。イベント フローを機能させるにはページが必要だと思いましたが、このためだけに新しい aspx を作成したくありませんでした。

また、同じロードコントロールをテストしたため、パスが存在しないものに変更したときに例外が発生しないため、パスが正しいと確信しています。HTML をアセンブルするコードを再設計することはできません。作業が多すぎて、私がやっていることの範囲外です。範囲は私が決めているわけではありません。

4

2 に答える 2

2

UserControlファイルのパスが正しくないようです。

これを試していただけませんか

string path = HttpContext.Current.Request.ApplicationPath == "/" ? 
   string.Empty : HttpContext.Current.Request.ApplicationPath;

... (FormAtt)myPage.LoadControl(path + "/path/to/my/file.ascx");

それでも機能しない場合は、aspxページに関連するfile.ascxはどこにありますか?

更新:myPage.Formは常にnullになります。HtmlFormをインスタンス化してください。

Page myPage = new Page();
HtmlForm form = new HtmlForm();
FormAtt ctrl = (FormAtt)myPage.LoadControl("path/to/my/file.ascx");
form.Controls.Add(ctrl);
myPage.Controls.Add(form);
于 2013-02-18T22:24:24.370 に答える
1

Page myPage = new Page();ここであなたが望むものではないことはほぼ間違いありません。コントロールを現在のページにロードしたいようですPage.Controls.Add(ctrl)

あなたのタイトルと質問はどちらもページの作成について非常に明確ですが、全体像をもっと説明する必要があるかもしれません.

于 2013-02-19T01:39:47.123 に答える