在listview中查找控件

时间:2012-07-27 08:53:45

标签: c# asp.net vb.net

我想使用FindControl来查找HiddenField的值,即hfBlogID。我想在ButtonClick

上找到值
<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>

4 个答案:

答案 0 :(得分:3)

为了确定正确的行索引,您应该将按钮放在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 lv_ItemCommand(object sender, ListViewCommandEventArgs e)
{
    switch (e.CommandName)
    {
        case "find":
            var hidden = e.Item.FindControl("your hidden id") as HiddenField;
            break;
    }
}

如果您的按钮不在ListView 中,那么您需要一种方法来识别要从中提取隐藏值的行。

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

protected void find_Click(object sender, EventArgs e)
{
    var hidden = this.lv.Items[this.lv.SelectedIndex].FindControl("your hidden ID") as HiddenField;
}

答案 1 :(得分:0)

您可以在列表视图中使用if按钮

var control = (HiddenField)e.Item.FindControl("hfBlogID");

或者如果按钮不在您的listvew中

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

答案 2 :(得分:0)

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

如果按钮位于列表视图之外,则需要获取其隐藏字段值的项目索引。

答案 3 :(得分:0)

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

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");

希望这会有所帮助..