我绑定了Repeater
。 Repeater
中的每一行(是正确的单词?)都有Button
和HiddenField
。如何根据点击的按钮确定HiddenField
的值?
Button OnClick
事件后面的代码:
protected void btnButton1_Click(object sender, EventArgs e)
{
Button btnButton1 = (Button)sender;
// how do i get this row's HiddenField Value?
}
修改:来自Pleun的CommandArgument
建议有效,但我仍然遇到问题。我需要在Repeater
中找到Button
所属的行(?),因为每行中还有一个TextBox
,我需要它的值。所以理想情况下我想得到那一行并去FindControl(“TextBox1”)等等。抱歉,应该在我最初的问题中说明
答案 0 :(得分:5)
我喜欢做的是向按钮添加一个CommandArgument。在这段代码中它的图像按钮但想法是一样的。所以也不需要额外的隐藏领域。
<asp:ImageButton ID="btnMail" ImageUrl="~/imgnew/prof/sendlink.png"
CommandArgument='<%# Eval("id")%>'
在_Click事件中
string id = ((ImageButton)sender).CommandArgument;
更新:
如果您需要所有数据,则需要一个不同的事件。转发器中的数据可在
中作为项目获得RepeaterCommandEventArgs
在Command事件中(RepeaterCommandEventArgs)
用于处理Command事件,请参阅此示例 http://www.asp.net/data-access/tutorials/custom-buttons-in-the-datalist-and-repeater-cs 要么 http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeatercommandeventargs.aspx
答案 1 :(得分:0)
答案 2 :(得分:0)
您可以通过获取按钮的父级向上遍历,然后对该控件执行FindControl()
。
Row parentRow = (Row)((Button)sender).Parent;
var tBox = (System.Web.UI.WebControls.TextBox)parentRow.FindControl("myTextBox")
您可能需要四处看看按钮嵌套的深度以及使用哪种控件类型来获取相应的父级。
答案 3 :(得分:0)
我的标记代码:
<asp:Repeater ID="RptFiles" runat="server">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>--</td>
<td><%#Eval("title")%></td>
<td>
<asp:FileUpload ID="fuVersion" runat="server" />
<asp:Button ID="btnUploadVersion" Text="Last opp" runat="server" OnClick="btnUploadVersion_Click" CommandArgument='<%#Eval("Id") %>' />
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
我的代码
protected void Upload_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
var documentId = btn.CommandArgument;
//Get the Repeater Item reference
RepeaterItem item = btn.NamingContainer as RepeaterItem;
var fuVersion = (FileUpload)item.FindControl("fuVersion");
var filename = fuVersion.PostedFile.FileName
}