首页 > 解决方案 > FindControl 在 Listview Null 异常中不起作用

问题描述

protected void PassSessionVariable_Click(object sender, EventArgs e)
{
    String strLocationID = livTour.FindControl("lblLocationID").ToString();
}

出于某种原因,FindControl得到了一个空异常。有什么特别的原因吗?

这是我的 Listview 的代码。查找控件未找到 LocationID 标签。

<%--Create datasource for ListView for Tour Locations.--%>
<asp:SqlDataSource runat="server" ID="sdsListViewTour"
    ConnectionString="<%$ConnectionStrings:2020LJCDT %>"
    OldValuesParameterFormatString="original_{0}"
    SelectCommand="SELECT LocationID, Location, Image
                     FROM Location
                    Order BY City;">
</asp:SqlDataSource>

<%--Listview--%>
<asp:ListView runat="server" ID="livTour"
    DataKeyNames="Location" 
    DataSourceID="sdsListViewTour">

    <ItemTemplate>

        <div class="container p-1 bg-light">

            <asp:LinkButton runat="server" ID="PassSessionVariable" OnClick="PassSessionVariable_Click">
                <div class="row border-top border-bottom border-secondary" style="padding-top: 5px; padding-bottom: 5px; padding-left: 20px;">

                    <asp:Label runat="server" ID="lblLocationID" Text='<%# Eval("LocationID") %>' />

                    <div class="col text-center" style="margin: auto; color: #2699FB;">
                        <asp:Label runat="server" CssClass="font-weight-bold" Text='<%# Eval("Location") %>' />
                    </div>

                    <div class="col text-center">
                        <asp:Image runat="server" CssClass="rounded" ImageUrl='<%# "~/Image/Location/" + Eval("Image") %>' />
                    </div>

                </div>
            </asp:LinkButton>

        </div>

    </ItemTemplate>
</asp:ListView>

标签: asp.net

解决方案


您可以通过发件人找到位置标签BindingContainer,如下所示:

protected void PassSessionVariable_Click(object sender, EventArgs e)
{
    var locationLabel = (((Control)sender).BindingContainer.FindControl("lblLocationID") as Label);

    String strLocationID = locationLabel.Text;
}

在这种情况下,BindingContainer 表示您单击的 ListItem 行。这样您就可以在此行中找到位置标签。


推荐阅读