我有一个在其中一个列中有一个LinkButton的转发器,我连接了onclick事件。当用户点击其中一个选项时,我需要知道他们点击了哪个LinkButton。这样做的最佳做法是什么?
答案 0 :(得分:3)
您应该使用OnCommand
事件代替OnClick
使用某些CommandName
和CommandArgument
来区分黑/项。 This MSDN page有一个例子。
答案 1 :(得分:3)
通常CommandArgument='<%#Eval("Id")
用于此目的
<asp:LinkButton ID="LinkButton1" runat="server"
CommandArgument='<%#Eval("Id") %>' CommandName="commandName"></asp:LinkButton>
然后就像......
protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if(e.CommandName == "commandName")
{
Int32 id = Convert.ToInt32(e.CommandArgument);
}
}
答案 2 :(得分:2)
您要做的是连接Repeater的ItemCommand
事件,而不是使用LinkButton的OnClick
事件。而是连接LinkButton的CommandName
。
当ItemCommand触发时,您将能够根据按钮上设置的CommandName
告诉触发它的按钮。您还可以访问Repeater的该行中的所有控件。
MSDN http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemcommand.aspx
答案 3 :(得分:0)
检查此代码
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
repTriggers.DataSource = new int[3] { 0, 1, 2 };
repTriggers.DataBind();
}
}
protected void repTriggers_ItemCommand(object sender, RepeaterCommandEventArgs e)
{
if (e.CommandName == "trigger")
{
LinkButton btn = e.CommandSource as LinkButton;
if (btn != null)
{
lblUpdate.Text = "Update triggered by " + btn.ID + e.Item.ItemIndex.ToString();
}
// [Steve] removed UpdatePanel2.Update()
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="TheScriptManager" runat="server"></asp:ScriptManager>
<%-- [Steve] removed UpdatePanel1 --%>
<asp:Repeater ID="repTriggers" runat="server" OnItemCommand="repTriggers_ItemCommand">
<ItemTemplate>
<asp:LinkButton ID="lnkTrigger" runat="server" Text="Trigger" CommandName="trigger"></asp:LinkButton>
</ItemTemplate>
</asp:Repeater>
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="conditional">
<%-- [Steve] added repTriggers as an AsyncPostBackTrigger --%>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="repTriggers" />
</Triggers>
<ContentTemplate>
<asp:Label ID="lblUpdate" runat="server"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>