我在checkout.aspx页面上有一个div。 div的内容如下:
<div id="PaymentDetails" runat="server" style="text-align:center" visible="true">
<asp:Label ID="PaymentDetailsLbl" Text="Payment Details:" runat="server" Font-Size="Large"></asp:Label>
<br />
<br />
<br />
<asp:Label ID="UNameLbl" Text="User Name:" runat="server"></asp:Label>
<asp:Label ID="UNameTextLabel" runat="server" Width="150px"></asp:Label>
<br />
<br />
<asp:Label ID="AmountLbl" Text="Amount:" runat="server"></asp:Label>
<asp:Label ID="AmountTextLabel" runat="server" Width="50px"></asp:Label>
<br />
<br />
<asp:Label ID="CCNumberLbl" Text="Credit Card No:" runat="server"></asp:Label>
<asp:TextBox ID="CCNumberTBox" runat="server"></asp:TextBox>
<br />
<br />
<br />
<asp:Button ID="SubmitBtn" runat="server" Text="Submit" OnClick="SubmitBtn_Click" />
<asp:Button ID="ResetBtn" runat="server" OnClick="ResetBtn_Click" Text="Reset" />
<br />
<br />
<asp:Label runat="server" ID="SuccessMessageLabel" ForeColor="Red"></asp:Label>
<asp:Button ID="SoftwareDownloadsBtn" runat="server" Text="Software Downloads" Visible="false"
OnClick="SoftwareDownloadsBtn_Click" />
<br />
<br />
<asp:RegularExpressionValidator ID="CCNumberValidator" ErrorMessage="Credit Card Number: Min 10 and max 16 digits, starts with 3 or 4"
ControlToValidate="CCNumberTBox" runat="server"></asp:RegularExpressionValidator>
</div>
当用户未选择任何项目或用户使用此代码删除购物车中的所有商品时,我尝试将div的可见性设置为false:
else if ((Session["SelectedRowItems"] == null) || (shoppingCartItems.Count == 0))
{
this.Page.FindControl("PaymentDetails").Visible = false;
GridView1.EmptyDataText = "No Items Checked Out";
GridView1.EmptyDataRowStyle.CssClass = "EmptyGridViewContent";
}
但是我收到以下错误:
对象引用未设置为对象的实例。
错误的详细屏幕截图为here
BTW我正在使用VS 2008,asp.net / C#及其Web应用程序项目
请帮帮我。
感谢您的期待
答案 0 :(得分:5)
使用FindControl()
定位PaymentDetails
仅在PaymentDetails
是根容器的一部分时才有效。也就是说,它不会递归搜索作为其他控件的子控件的控件。
看起来FindControl()
返回null,当您尝试在null
上调用方法时出现错误。
FindControl()
。只需使用PaymentDetails.Visible = false
。
答案 1 :(得分:0)
如果您的div既不是子页面,也不是usercontrol也不是母版页,那么您不需要使用FindControl方法。添加一个runat服务器标签,并使用id。
在代码隐藏文件中访问它apsx page:
<div id="myDiv" runt="server" >
// Your html
</div>
aspx.cs:
private void ShowHideDiv(bool status)
{
myDiv.Visible = status;
}