我想使用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>
答案 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");
希望这会有所帮助..