ASP.NET: 在后面的代码中找到带有 ClientId 的 ListView 中的控件

ASP.NET: find control in ListView with ClientId in code behind

之前有人问过我的问题,但我无法解决。我想我需要你的帮助。

<asp:ListView runat="server" ID="listvsl">
    <ItemTemplate>
        <td>
            <img style="width: 100%; height: 150px;" src="<%#Eval("resim") %>" /><br />
            <asp:Button ID="in" runat="server" Text="Sol" ClientIDMode="Inherit" OnClick="haraket" Style="width: 75px;" />
            <asp:Button ID="cik" OnClick="haraket" runat="server" Text="Sağ" Style="width: 75px;" /><br />
            <asp:Button ID="Button10" runat="server" Text="Sil" OnClick="sil_Clickice" Style="width: 150px;" /><br />
            <asp:TextBox ID="aciklax" runat="server" TextMode="MultiLine" ClientIDMode="Inherit" /><br />
            <asp:Button ID="Button12" runat="server" Text="Güncelle" ClientIDMode="Inherit" OnClick="yazignc" />
        </td>
    </ItemTemplate>
</asp:ListView>

I need to get the aciklax TextBox with FindControl when I click "Button12"

Button bu = (Button)sender;//Button12's onclick event
string[] falanca = bu.ClientID.ToString().Split('_');
string alcez = falanca[0] + "_" + falanca[1] + "_" + "aciklax" + "_" + falanca[3];

这是我查找 ClientId 的方法。我得到了 ClientId,但无法用它获得 TextBox 控件。你能帮帮我吗?

幸运的是,您无需分析 ClientID 即可找到 TextBox 控件。您可以使用按钮的 NamingContainer 属性 来查找对应的 ListView 项。然后就可以找到item中的TextBox,使用ItemTemplate中指定的原始ID:

Button btn = sender as Button;
ListViewItem item = btn.NamingContainer as ListViewItem;
TextBox txt = item.FindControl("aciklax") as TextBox;