在动态创建的页面中,表单为Null
本文关键字:表单 Null 动态 创建 | 更新日期: 2023-09-27 18:00:12
我正在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)
,控件将不会呈现,并且看起来events没有被激发,我想我必须有一个页面来使事件流工作,但我真的不想仅仅为此创建一个新的aspx。
此外,我确信路径是正确的,因为我测试了相同的负载控制,并且当我将路径更改为不存在的东西时,它不会引发异常。我不能重新设计组装HTML的代码,因为这太多的工作了,而且它超出了我所做的范围,范围不是由我决定的。
看起来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);
Page myPage = new Page();
几乎肯定不是您想要的。听起来您想将控件加载到当前页面,该页面将只是Page.Controls.Add(ctrl)
。
不过,你的标题和问题都很清楚如何创建页面,所以也许你应该更多地解释大局。