表单在动态创建的页面中为空

时间:2013-02-18 21:56:10

标签: c# asp.net webforms

我在ASP.NET中动态创建一个页面,我想在表单中加载一个Control,但每次我尝试将它添加到Page.Form.Controls时,Form为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的代码,因为它只是工作太多而且超出了我正在做的范围,范围不是我决定的。

2 个答案:

答案 0 :(得分:2)

看起来UserControl文件路径不正确。

你能试试吗

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

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

如果它仍然不起作用,你的file.ascx在哪里与你的aspx页面相关?

更新: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);

答案 1 :(得分:1)

Page myPage = new Page();几乎绝对不是你想要的。听起来您想要将控件加载到当前页面中,这只是Page.Controls.Add(ctrl)

你的标题和问题在创建一个页面时非常清楚,所以也许你应该更多地解释一下。