如何判断转发器中的哪个按钮被按下?

时间:2014-02-14 23:19:09

标签: 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>
        <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>

在相当标准的转发器控件中有两个标签和一个按钮。转发器绑定到数据库,并使用数据库中的记录填充标签。

这是我的问题:转发器中的每个按钮都有一个点击事件。当用户单击任何按钮时,将调用RemoveAssignment_Click方法。在click事件中,我想知道与用户点击的任何按钮相关联的两个标签的文本。

我的意思是,在这种方法中:

protected void RemoveAssignment_Click(object sender, EventArgs e)
{
    //code goes here
}

我希望能够知道与单击的按钮相邻的标签文本。我该怎么做?

3 个答案:

答案 0 :(得分:2)

您要找的是Button.OnCommand Method

  

这允许您在网页上创建多个Button控件   以编程方式确定单击哪个Button控件。

因此在ListOfAssignments_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" />

然后你创建方法:

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
    }
}

答案 1 :(得分:1)

您可以将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"/>

然后在事件处理程序中,您可以执行以下操作:

string[] args = e.CommandArgument.ToString().Split(new char[] {','});
string label1 = args[0];
string label2 = args[1];

这应该让你去。

答案 2 :(得分:-2)

嗯,我知道c#和wp但是你应该尝试设置一个bool并使用这个逻辑:如果它是false,重复将继续,如果是,它将退出重复。试试这个:

bool exit;


void Button_Click(eventargs stuffy here)
{
exit = true,
}

void Repeat()
{
    if (exit == false)
    {
    Repeat();
    //Your code here
    }
}