Panel pnl_Confirmation = (Panel)form1.FindControl("ConfirmationPanel") as Panel;
pnl_Confirmation.Visible = false;
我在上面的代码中不断收到“NullReferenceException”。 “ConfirmationPanel”是我显示/隐藏的面板,具体取决于表单是否成功提交。
面板包含在LoginView控件中,这就是我无法直接调用“ConfirmationPanel”的原因:
<asp:LoginView ID="LoginView1" runat="server">
<LoggedInTemplate>
<asp:Panel id="ConfirmationPanel" runat="server" Wrap="False">
...
为什么这是空的?应该使用ID“ConfirmationPanel”引用Panel,不是吗?
由于
答案 0 :(得分:4)
试试这个:
Panel pnl_Confirmation = LoginView1.FindControl("ConfirmationPanel") as Panel;
if(pnl_Confirmation != null)
pnl_Confirmation.Visible = false;
答案 1 :(得分:2)
这完全取决于您拥有该代码的位置。如果你在Page_Load()之前有它,那么控制树可能还没有构建,因此是空引用。
答案 2 :(得分:1)
使用 LoginView 的FindControl代替
Panel pnl_Confirmation = LoginView1.FindControl("ConfirmationPanel") as Panel;
因为它是LoginView模板的一部分。
答案 3 :(得分:1)
“仅当控件直接包含在指定的容器中时,FindControl才会找到控件;也就是说,该方法不会在控件内的控件层次结构中进行搜索。”(来自MSDN文档)
即。在LoginView上调用FindControl或创建递归FindControl
答案 4 :(得分:0)
似乎你试图进行两次类型转换。
尝试仅使用一次最佳效果进行类型转换:
Panel pnl_Confirmation = (Panel)form1.FindControl("ConfirmationPanel");
或
Panel pnl_Confirmation = form1.FindControl("ConfirmationPanel") as Panel;
在尝试访问之前验证您的引用是否为null也很重要
if (pnl_Confirmation != null)
pnl_Confirmation.Visible = false;