C# 我怎样才能知道中继器中的哪个按钮被按下了?
我在.aspx文件中有以下标记:C# 我怎样才能知道中继器中的哪个按钮被按下了?,c#,asp.net,events,button,repeater,C#,Asp.net,Events,Button,Repeater,我在.aspx文件中有以下标记: <asp:Repeater ID="ListOfAssignments" runat="server" OnItemDataBound="ListOfAssignments_ItemDataBound"> <ItemTemplate> <asp:Label ID="AssignmentID" runat="server" Text="Label"></asp:Label>
<asp:Repeater ID="ListOfAssignments" runat="server" OnItemDataBound="ListOfAssignments_ItemDataBound">
<ItemTemplate>
<asp:Label ID="AssignmentID" runat="server" Text="Label"></asp:Label>
<br />
<asp:Label ID="PathToFile" runat="server" Text="Label"></asp:Label>
<br />
<asp:Button ID="RemoveAssignment" runat="server" Text="Remove" OnClick="RemoveAssignment_Click"/>
</ItemTemplate>
</asp:Repeater>
我希望能够知道与单击的按钮相邻的标签文本。我该怎么做?嗯,我知道c#和wp,但你应该尝试设置一个布尔值,并使用以下逻辑:如果为假,重复将继续,如果为真,将退出重复。试试这个:
bool exit;
void Button_Click(eventargs stuffy here)
{
exit = true,
}
void Repeat()
{
if (exit == false)
{
Repeat();
//Your code here
}
}
您可以向按钮标记添加CommandName和CommandArgument属性,并将它们用作提示。然后在偶数处理程序中,您可以执行e.CommandName==“xxx”或e.CommandArgument==“xxx”。还可以使用CommandArgument传递实际字符串。您只需像绑定标签、文本等一样绑定数据:
<asp:Button ID="RemoveAssignment" runat="server" CommandArgument='<%#Eval("Label1")+","+ Eval("Label2")%>' Text="Remove" OnClick="RemoveAssignment_Click"/>
这应该能让你走了。你要找的是: 这允许您在网页上创建多个按钮控件,并 以编程方式确定单击哪个按钮控件 因此,在
ListOfAssignments\u ItemDataBound
中,您可以将CommandArgument分配给按钮,其中CommandArgument
是要删除的文章的ID:
protected void ListOfAssignments_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Button delButton = e.Item.FindControl("RemoveAssignment") as Button;
delButton.CommandArgument = //set to the value of AssignmentID
//rest of your code
}
}
现在,您的按钮应该显示使用新的OnCommand:
<asp:Button ID="RemoveAssignment" OnCommand="RemoveAssignment" runat="server" Text="Remove" />
有了这个提示,您将知道在代码背后要读取哪些标签对象。@LincolnBergeson一些唯一的标识符,如AssignmentID。它如何计算AssignmentID?我不明白。@LincolnBergeson给我一分钟,我将发布一个示例,您将在哪里发布它?如果exit为false,您的Repeat()方法将使您进入无限循环。嗯,是的。。。您是对的:)您也可以通过添加if(framyint==3){//dostuff}else{framyint++}来跳过帧。为什么这一行:“if(e.Item.ItemType==ListItemType.Item | | e.Item.ItemType==ListItemType.AlternatingItem)”是必需的?@LincolnBergeson在您的示例中,这是不必要的。但是如果删除它,然后稍后添加
HeaderTemplate
或FooterTemplate
,则ItemDataBound
事件将失败,因为e.Item.FindControl(“RemoveAssignment”)as按钮
不起作用,因为该按钮在页眉/页脚中不存在。。。所以一直这样做是一种很好的做法。在尝试查找控件之前,它只需确保它位于AlternatingItemTemplate
或ItemTemplate
中。
protected void ListOfAssignments_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Button delButton = e.Item.FindControl("RemoveAssignment") as Button;
delButton.CommandArgument = //set to the value of AssignmentID
//rest of your code
}
}
<asp:Button ID="RemoveAssignment" OnCommand="RemoveAssignment" runat="server" Text="Remove" />
protected void RemoveAssignment(object sender, CommandEventArgs e)
{
int articleIDToDelete = 0;
if (Int32.TryParse((string)e.CommandArgument, out articleIDToDelete))
{
//delete the article with an ID = articleIDToDelete
}
}