我如何让中继器的 Itemcommand 事件不进行整页回发? [英] How do I have my repeater's Itemcommand event not do a full page postback?

查看:20
本文介绍了我如何让中继器的 Itemcommand 事件不进行整页回发?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的用户控件中,我有以下标记:

<asp:UpdatePanel runat="server"><触发器><asp:AsyncPostBackTrigger ControlID="PageEditList"/></触发器><内容模板><asp:HiddenField runat="server" ID="CurrentPageId"/><asp:Label runat="server" ID="EditDisplayLabel" Visible="False">与此页面相关的</asp:Label><br/><ul><asp:Repeater runat="server" ID="PageEditList" OnItemCommand="PageEditList_ItemCommand"><项目模板><li><%# ((PageEdit)Container.DataItem).CachedName %>(<asp:LinkBut​​ton ID="LinkBut​​ton1" runat="server" Text="remove" CommandName="remove" CommandArgument="<%# ((PageEdit)Container.DataItem).Id %>"/>)</ItemTemplate></asp:中继器></内容模板></asp:UpdatePanel>

每当我单击删除链接按钮时,它都会执行整页回发,而不仅仅是更新此控件的面板.我的母版页具有以下设置:

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="True"/>

这个应用程序的其他部分(我继承了它,写这个的老开发者已经不在了)似乎可以很好地进行部分页面更新.我做错了什么吗?

解决方案

尝试注册链接按钮 作为异步回发控件,合适的地方是ItemCreated 事件,在每次(异步/完整)回发时触发:

protected void PageEditList_ItemCreated(Object Sender, RepeaterItemEventArgs e){if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem){ScriptManager scriptMan = ScriptManager.GetCurrent(this);LinkBut​​ton btn = e.Item.FindControl("LinkBut​​ton1") as LinkBut​​ton;if(btn != null){btn.Click += LinkBut​​ton1_Click;scriptMan.RegisterAsyncPostBackControl(btn);}}}

In my user control I have the following markup:

<div id="pageEditsView" style="margin-left:540px">
    <asp:UpdatePanel runat="server">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="PageEditList"/>
        </Triggers>
        <ContentTemplate>
            <asp:HiddenField runat="server" ID="CurrentPageId"/>
            <asp:Label runat="server" ID="EditDisplayLabel" Visible="False">Edits tied to this page:</asp:Label>
            <br/>
            <ul>
                <asp:Repeater runat="server" ID="PageEditList" OnItemCommand="PageEditList_ItemCommand">
                    <ItemTemplate>
                        <li>
                            <%# ((PageEdit)Container.DataItem).CachedName %> 
                            (<asp:LinkButton ID="LinkButton1" runat="server" Text="remove" CommandName="remove" CommandArgument="<%# ((PageEdit)Container.DataItem).Id %>" />)
                        </li>    
                    </ItemTemplate>
                </asp:Repeater>
            </ul>
        </ContentTemplate>
    </asp:UpdatePanel>
</div>

Whenever I click on the remove link button, it is performing a full page postback instead of just updating this control's panel. My master page has the following setup:

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="True" />

Other parts of this application (which I inherited, and the old dev who wrote this is no longer around) seems to do partial page updates just fine. Am I doing something wrong?

解决方案

Try to register the linkbutton as async postback control, the appropriate place is the ItemCreated event which is triggered on every (async/full) postback:

protected void PageEditList_ItemCreated(Object Sender, RepeaterItemEventArgs e) 
{
     if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
     {
         ScriptManager scriptMan = ScriptManager.GetCurrent(this);
         LinkButton btn = e.Item.FindControl("LinkButton1") as LinkButton;
         if(btn != null)
         {
             btn.Click += LinkButton1_Click;
             scriptMan.RegisterAsyncPostBackControl(btn);
         }
     }
}

这篇关于我如何让中继器的 Itemcommand 事件不进行整页回发?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆