在aspx页面中设置div的可见性的问题

时间:2011-04-03 18:00:34

标签: asp.net html visibility

我在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>
    &nbsp;
    <asp:Label ID="UNameTextLabel" runat="server" Width="150px"></asp:Label>
    <br />
    <br />
    <asp:Label ID="AmountLbl" Text="Amount:" runat="server"></asp:Label>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <asp:Label ID="AmountTextLabel" runat="server" Width="50px"></asp:Label>
    <br />
    <br />
    <asp:Label ID="CCNumberLbl" Text="Credit Card No:" runat="server"></asp:Label>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <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应用程序项目

请帮帮我。

感谢您的期待

2 个答案:

答案 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;
}