Repeater Item命令使用Update Panel创建回发

时间:2011-08-02 19:01:33

标签: asp.net

我有更新面板,因为我有带有命令属性的链接按钮的转发器控件

我已经尝试了ItemCommand事件或链接按钮点击两者都在创建回发

这是

的代码
<asp:UpdatePanel ID="upFC" runat="server" UpdateMode="Always" ChildrenAsTriggers="true">
        <ContentTemplate>
     <asp:Repeater ID="rptFCItem" runat="server" OnItemDataBound="rptFCItem_ItemDataBound" OnItemCommand="rptFCItem_ItemCommand" EnableViewState="true">
                    <ItemTemplate>
                        <asp:LinkButton ID="lnkElement" runat="server" OnClick="lnkCurrent_Click" CommandName="Element"></asp:LinkButton>
                    </ItemTemplate>
                </asp:Repeater>
    </ContentTemplate>

以下是服务器端代码

  protected void lnkCurrent_Click(object sender, EventArgs e)
    {
        BindFC(Element, true);
    }


 protected void rptFCItem_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemIndex >= 0)
        {
            LinkButton lnkElement = (LinkButton)e.Item.FindControl("lnkElement");
            if (lnkElement != null)
            {
                lnkElement.Text = (e.Item.ItemIndex+1).ToString();
            }
        }
    }

protected void rptFCItem_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
       //some code here
    }

但是itemcommand work或click事件都不适用于更新面板async,它会创建完整的回发。

是否有人有解决方案。

最诚挚的问候,

Jalpesh

2 个答案:

答案 0 :(得分:0)

在上面发布的代码中,您已在Markup中将事件注册为OnItemCommand =“rptFlashCardItem_ItemCommand”

在后面的代码中,名称与'rptFCItem_ItemCommand'不同。这个现有代码在编译时是否会出错?如果是,则可能是名称不匹配。

答案 1 :(得分:0)

如果你将Repeater替换为ListView,它可以工作。

<asp:UpdatePanel ID="upFC" runat="server" UpdateMode="Always" ChildrenAsTriggers="true">
        <ContentTemplate>
            <asp:ListView ID="rptFCItem" runat="server" OnItemDataBound="rptFCItem_ItemDataBound"
                OnItemCommand="rptFCItem_ItemCommand" EnableViewState="true">
                    <ItemTemplate>
                    <asp:LinkButton ID="lnkElement" runat="server" OnClick="lnkCurrent_Click" CommandName="Element"></asp:LinkButton>
                </ItemTemplate>
            </asp:ListView>
        </ContentTemplate>
    </asp:UpdatePanel>

您还需要使用ListView版本替换repeater事件args。

protected void rptFCItem_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    if (e.Item.DataItemIndex >= 0)
    {
        LinkButton lnkElement = (LinkButton)e.Item.FindControl("lnkElement");
        if (lnkElement != null)
        {
            lnkElement.Text = (e.Item.DataItemIndex + 1).ToString();
        }
    }
}

protected void rptFCItem_ItemCommand(object source, ListViewCommandEventArgs e)
{
    // some code here
}

我认为它与转发器不兼容的原因与转发器不能在其中提供与其他列表类型控件相同的命名结构这一事实。