【问题标题】:Repeater Item command creating post back with Update Panel使用更新面板创建回发的中继器项目命令
【发布时间】:2011-08-02 19:01:33
【问题描述】:

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

我已经尝试过 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 或 click 事件都不适用于更新面板异步创建完整的回发。

有没有人可以解决的。

最好的问候,

贾尔佩什

【问题讨论】:

  • 您是否在页面中收到任何 javascript 错误?!您确定 ajax 正在执行任何请求吗?!
  • 来自what I found 这是更新面板中有关更新模式的错误。如果updatemode="conditional" 有效吗? More Reading & yet more reading.
  • 我已经尝试过条件和总是

标签: asp.net


【解决方案1】:

在上面发布的代码中,您已在标记中将事件注册为 OnItemCommand="rptFlashCardItem_ItemCommand"

在后面的代码中,名称与“rptFCItem_ItemCommand”不同。这个现有的代码在编译时会给你一个错误吗?如果是,则可能是名称不匹配。

【讨论】:

    【解决方案2】:

    如果你将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 版本。

    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
    }
    

    我认为它不适用于中继器的原因与中继器内部没有提供与其他列表类型控件相同的命名结构有关。

    【讨论】:

    • 我也尝试过列表视图。它不工作,但没关系,我已经用 datalist 弄清楚了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多