C# Webforms中继器链接问题

C# Webforms中继器链接问题,c#,asp.net,webforms,repeater,linkbutton,C#,Asp.net,Webforms,Repeater,Linkbutton,我有一个中继器,在它的一列中有一个LinkButton,并且我已经连接了onclick事件。当用户点击其中一个选项时,我需要知道他们点击了哪个链接按钮。执行此操作的最佳实践是什么?您应该使用OnCommand事件,而不是OnClick使用一些CommandName和CommandArgument来区分黑白项目。有一个例子。通常CommandArgument='用这段代码检查 <%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-/

我有一个中继器,在它的一列中有一个LinkButton,并且我已经连接了onclick事件。当用户点击其中一个选项时,我需要知道他们点击了哪个链接按钮。执行此操作的最佳实践是什么?

您应该使用
OnCommand
事件,而不是
OnClick
使用一些
CommandName
CommandArgument
来区分黑白项目。有一个例子。

通常
CommandArgument='用这段代码检查

<%@ 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>

受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!Page.IsPostBack)
{
repTriggers.DataSource=newint[3]{0,1,2};
repTriggers.DataBind();
}
}
受保护的void repTriggers\u ItemCommand(对象发送器、RepeaterCommandEventArgs e)
{
如果(例如CommandName==“触发器”)
{
LinkButton btn=e.CommandSource作为LinkButton;
如果(btn!=null)
{
lblUpdate.Text=“由“+btn.ID+e.Item.ItemIndex.ToString()触发的更新”;
}
//[Steve]删除了UpdatePanel2.Update()
}
}
无标题页

您要做的是连接中继器的
ItemCommand
事件,而不是使用LinkButton的
OnClick
事件。而是将链接按钮的
CommandName
连接起来

当ItemCommand启动时,您将能够根据按钮上设置的
CommandName
判断是哪个按钮触发了它。您还可以访问中继器该行中的所有控件

MSDN

protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
    if(e.CommandName == "commandName")
    {
       Int32 id = Convert.ToInt32(e.CommandArgument);
    }
}
<%@ 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>