尝试动态添加动态生成内容的用户控件。用户控件无法获取面板上的控件来放置控件。
首先我有一个页面(test.aspx):
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:Panel ID="Panel1" runat="server">
</asp:Panel>
</form>
</body>
</html>
代码背后的代码:
public partial class test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
TestUserControl uc = new TestUserControl();
Panel1.Controls.Add(uc);
//this is where the error happens:
uc.Fill();
}
}
然后这是用户控件:
<asp:Panel ID="pnlTest" runat="server" >
</asp:Panel>
和背后的代码:
public partial class TestUserControl: System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
public void Fill()
{
Label lbl = new Label();
lbl.Text = "test";
//This is where pnlTest is null and I get "Object Reference Not Found..."
pnlTest.Controls.Add(lbl);
}
}
所以......看起来我正在调用Fill()的点是在渲染用户控件之前,因此pnlTest尚未实例化。但是,我不确定从test.aspx调用uc.Fill()的位置...我尝试了Page_PreRenderComplete,但这也不起作用......
(如果你看到一个名字不匹配......这可能不是错误......名称已被更改以保护无辜者)
答案 0 :(得分:8)
public partial class test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Page_Init(object sender, EventArgs e)
{
TestUserControl uc = (TestUserControl)Page.LoadControl("~/UserControls/TestUserControl.ascx");
Panel1.Controls.Add(uc);
uc.Fill();
}
}
答案 1 :(得分:0)
我有类似的问题。事实证明,系统无法找到对象的引用,因为它尚未在[filename].aspx.designer.cs
文件中进行结构化/包含。
停止代码以添加面板,然后重新构建解决方案 应确保添加此引用,这应该修复该对象 引用异常问题。
答案 2 :(得分:0)
Windows窗体应用程序中的类似问题-需要添加
using SomeDllInMyProject;
到表单代码。即使该项目引用了DLL,引用也必须采用表单代码。