C# listview中的findcontrol

C# listview中的findcontrol,c#,asp.net,vb.net,C#,Asp.net,Vb.net,我想使用FindControl查找HiddenField的值,即hfBlogID。我想在按钮上查找值单击 <asp:ListView ID="lvArticle" runat="server"> <LayoutTemplate> <div runat="server" id="itemPlaceHolder"> </div> </LayoutTemplate> <ItemTe

我想使用
FindControl
查找
HiddenField
的值,即
hfBlogID
。我想在
按钮上查找值单击

<asp:ListView ID="lvArticle" runat="server">
    <LayoutTemplate>
        <div runat="server" id="itemPlaceHolder">
        </div>
    </LayoutTemplate>
    <ItemTemplate>
        <asp:HiddenField ID="hfBlogID" Value='<%#Eval("BlogID")%>' runat="server" />
        <p>
            <%#Eval("BlogTitle")%></p>
        <p>
            <%#Eval("BlogDetails")%></p>
    </ItemTemplate>
</asp:ListView>



如果按钮在listview中,则可以使用

var control = (HiddenField)e.Item.FindControl("hfBlogID");
或者如果按钮不在您的列表中

 var contorl = (HiddenField)this.lvArticle.Items[this.lvArticle.SelectedIndex].FindControl("hfBlogID");

为了确定正确的行索引,您应该将按钮放在
ListView.ItemTemplate
中,并处理
ListView.ItemCommand
事件

为了实现此方法,您必须按如下方式更改代码:

<asp:ListView ID="lvArticle" runat="server" OnItemCommand="lv_ItemCommand">
..
    <ItemTemplate>
        <asp:HiddenField ID="hfBlogID" Value='<%#Eval("BlogID")%>' runat="server" />
        <p>
            <%#Eval("BlogTitle")%></p>
        <p>
            <%#Eval("BlogDetails")%></p>
        <asp:Button runat="server" CommandName="find" CommandArgument='<%# Eval("yourIDField") %>' />
    </ItemTemplate>
...
protected void find_Click(object sender, EventArgs e)
{
    var hidden = this.lv.Items[this.lv.SelectedIndex].FindControl("your hidden ID") as HiddenField;
}
如果按钮不在ListView中,则需要一种方法来标识要从中提取隐藏值的行

例如,如果允许在
列表视图中选择一行,则可以从所选行中获取隐藏值,如下所示:

<asp:ListView ID="lvArticle" runat="server" OnItemCommand="lv_ItemCommand">
..
    <ItemTemplate>
        <asp:HiddenField ID="hfBlogID" Value='<%#Eval("BlogID")%>' runat="server" />
        <p>
            <%#Eval("BlogTitle")%></p>
        <p>
            <%#Eval("BlogDetails")%></p>
        <asp:Button runat="server" CommandName="find" CommandArgument='<%# Eval("yourIDField") %>' />
    </ItemTemplate>
...
protected void find_Click(object sender, EventArgs e)
{
    var hidden = this.lv.Items[this.lv.SelectedIndex].FindControl("your hidden ID") as HiddenField;
}

如果按钮位于同一项模板中,则使用ItemCommand事件处理程序,并在该处理程序中直接获取隐藏字段


如果按钮不在列表视图中,则需要获取其隐藏字段值的项目索引。

在此,您可以访问每个项目的隐藏字段:

protected void Button1_Click(object sender,EventArgs e)
{
  foreach(ListViewDataItem item in lvArticle.Items)
   {
     HiddenField hf=(HiddenField)item.FindControl("hfBlogID");
   }

}
若你们已经有了项目的索引,那个么你们可以像这样直接得到它

 HiddenField hf=(HiddenField)lvArticle.Items[index].FindControl("hfBlogID");

希望这会有所帮助。

我的按钮不在我的
列表视图中。
…我无法获取所选索引,因为没有选择任何内容…但一次只有一行…因此我可以始终选择第一行。.我该如何做?如果只有一行,则使用此:
var hidden=this.lvArticle.Items[0]。FindControl(“您的隐藏ID”)作为HiddenField;
我得到此异常
System.ArgumentOutOfRangeException:索引超出范围。必须为非负且小于集合的大小。
则表示列表视图为空。是否确定它包含一行?如果要执行命令,这不是使用
列表视图的典型方式您应该将按钮放在
项目模板
中,否则(就像您的情况一样),您应该完全确保您的
列表视图
在您试图访问它的位置包含一个项目。您可以尝试添加一个条件,但这不是办法。如果(this.lv.Items.Count>0)添加