如何从datalist_item命令隐藏或制作可见面板

时间:2015-05-12 20:41:07

标签: asp.net vb.net webforms datalist

整整一天花了很多时间,并且在没有帮助的情况下搜索了尽可能多的网站。

我在asp.net页面上有一个隐藏的面板,直到用户点击linkbutton为止。该面板包含DataList。这是.aspx:

<asp:Panel ID="pnlManageYourGallery" Visible="false" runat="server">

    <div style="width:70%; height:90%; position:fixed; left:200px; top:10px; background-color:White; background-color:#f1f1f1 ">
        <center>
            <h1>Manage Your Gallery</h1></center>
        <div style="position:absolute; top:50px; left:25px; margin-left:auto; margin-right:auto; height:90%; width:50%; background-color:white; overflow:auto;">

            <asp:DataList ID="dlManageGallery" runat="server" DataSourceID="SqlDataSourceManageGallery" RepeatDirection="Horizontal" RepeatLayout="Flow" DataKeyField="RecNum">
                <ItemTemplate>
                    <div style="position:relative; background-color:#fafad2; padding:10px; margin:10px;  border: 5px solid #b0c4de; border-radius: 3px; width:90%;">
                        <p>Image No.
                            <%# Eval( "RecNum") %>&nbsp;Uploaded
                                <%# Eval( "UploadDate") %>
                        </p>
                        <center><img src='<%# Eval("ImageFilename") %>' width="50%" /></center>
                        <br /> Caption:
                        <asp:TextBox ID="txtImageCaption" Width="400" Text='<%# Eval("Caption") %>' runat="server"></asp:TextBox>
                        <br />
                        <br />
                        <center>

                            <asp:Panel id="pnlImageControls" visible="true" runat="server">
                                <asp:LinkButton ID="lnkDeleteImage" CommandName="DeleteImage" Text="Delete this image" runat="server"></asp:LinkButton>&nbsp;&nbsp;&nbsp;&nbsp;
                                <asp:LinkButton ID="lnkSaveImageChanges" CommandName="SaveChanges" CommandArgument='<%# Eval("RecNum") %>' Text="Save Changes" runat="server"></asp:LinkButton>
                            </asp:Panel>
                        </center>

                    </div>
                </ItemTemplate>
            </asp:DataList>
            <asp:SqlDataSource ID="SqlDataSourceManageGallery" runat="server" ConnectionString="<%$ ConnectionStrings:MyConnectionString2 %>" SelectCommand="SELECT [RecNum], [ImageFilename], [Caption], [UploadDate] FROM [tblGallery] ORDER BY [RecNum] DESC">
            </asp:SqlDataSource>
        </div>
        <asp:Panel ID="pnlImageDeleteWarning" Visible="false" runat="server">
            <div style="position:fixed; left:600px; top:300px; background-color:White; border:5px solid red; padding:10px;">
                <center>
                    <p style="color:Red; font-weight:bold;">Are you sure you want to delete this image?</p>
                    <asp:Button ID="btnDeleteImage" CommandName="DeleteImageConfirm" CommandArgument='<%# Eval("RecNum") %>' Text="Yes, delete this image" runat="server" />&nbsp;&nbsp;&nbsp;&nbsp;
                    <asp:Button ID="btnCancelDelete" CommandName="DoNotDelete" text="No, do not delete" runat="server" />
                </center>
            </div>
        </asp:Panel>

    </div>
</asp:Panel>

可以看出,DataList中的每个数据项都包含包含其他控件的面板。我需要做的是,点击lnkDeleteImages链接后,pnlImageControls面板应隐藏,pnlImageDeleteWarning应显示。这是代码隐藏的原因:

Private Sub dlManageGallery_ItemCommand(source As Object, e As System.Web.UI.WebControls.DataListCommandEventArgs) Handles dlManageGallery.ItemCommand

    Dim pnlImageControls As Panel = CType(e.Item.FindControl("pnlImageControls"), Panel)

    Select Case e.CommandName
        Case "DeleteImage"
            pnlImageControls.Visible = False
            pnlImageDeleteWarning.Visible=True
    End Select

End Sub

现在,我已经尝试了我可以在互联网上找到的FindControl方法的每个变体,但没有任何效果。

但是,在断点处调试时,在即时窗口中使用? pnlImageControls.visible,在单击之前返回值“true”,在单击后返回“false”。控制认为它是隐形的,但事实并非如此。

我甚至尝试过 - 没有期待一个好的结果 - 一个更新小组,我得到了我所期待的。

好的,这就是它在这个页面上的位置。我在同一个项目中有另一个.aspx页面,我正在做同样的事情 - 在一个datalist项目模板中设置一个面板的visible属性 - 它工作得很好。 两个页面之间唯一不同的是它所使用的页面是一个独立的页面,即不是site.master的一部分。它不工作的页面的一部分,位于ContentPlaceHolderID="MainContent"块中的site.master。所以我尝试进行findcontrol钻孔通过MainContent块向下到Datalist ItemTemplate。当我这样做时,它会在到达面板时抛出Null Reference错误。

我希望我已经正确解释了这一点。

有人能告诉我我做错了什么吗?

0 个答案:

没有答案