Вопрос о повторителе Webforms - PullRequest
2 голосов
/ 28 июля 2011

У меня есть повторитель, у которого LinkButton находится в одном из столбцов, и у меня есть событие onclick. Когда пользователь нажимает на один из вариантов, мне нужно знать, в каком событии LinkButton он нажал. Как лучше всего это делать?

Ответы [ 4 ]

3 голосов
/ 28 июля 2011

Обычно 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);
    }
}
3 голосов
/ 28 июля 2011

Вы должны использовать событие OnCommand вместо OnClick, используйте некоторые CommandName и CommandArgument для различения ч / б предметов. Эта страница MSDN содержит пример.

2 голосов
/ 28 июля 2011

То, что вы хотите сделать, это подключить событие повторителя ItemCommand и не использовать событие LinkButton OnClick. Вместо этого подключите CommandName LinkButton.

Когда сработает ItemCommand, вы сможете определить, какая кнопка сработала, основываясь на CommandName, установленном для кнопки. Вы также получите доступ ко всем элементам управления в этом ряду повторителя.

MSDN http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemcommand.aspx

0 голосов
/ 28 июля 2011

Проверить с помощью этого кода

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

Исходный URL http://forums.asp.net/p/1062060/1528071.aspx

...