Asp.net 我如何拥有我的中继器&x27;Items命令事件是否不执行整页回发?

Asp.net 我如何拥有我的中继器&x27;Items命令事件是否不执行整页回发?,asp.net,webforms,Asp.net,Webforms,在我的用户控件中,我有以下标记: <div id="pageEditsView" style="margin-left:540px"> <asp:UpdatePanel runat="server"> <Triggers> <asp:AsyncPostBackTrigger ControlID="PageEditList"/> </Triggers> <

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

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

与此页面关联的编辑:

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

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


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

在ContentTemplate之后添加此内容

    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="PageEditList" EventName="ItemCommand" />            
    </Triggers>

尝试注册linkbutton,适当的位置是每次(异步/完整)回发时触发的事件:

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);
         }
     }
}

我认为问题在于触发事件的控件不是PageEditList,而是其中的remove按钮。因此,您必须遍历所有按钮,并将所有删除按钮注册为代码隐藏中的异步按钮。可能使用中继器的OnItemCreated事件来执行此操作。使用更新面板上的
UpdateMode=“Conditional”
ChildrenAsTriggers=“false”
设置,这对我来说很好。在asp.net 4.0上使用我需要的ChildrenAsTriggers=“true”不适用。当我这样做时(无论是在更新面板内容的内部还是外部使用repeater,我都会在javascript中遇到这个错误:ncaught TypeError:无法读取未定义的属性“id”。我的链接按钮在检查元素时都会显示一个id。我感到困惑。我目前正在维护一个WebForms,并且承认,我完成上一个WebForms项目已经将近10年了。But我不记得曾经必须这样做才能让Repeater Itemcommand事件与UpdatePanel一起工作。在同一个窗体上,我在Repeater外部有一个按钮,它可以毫无问题地触发UpdatePanel。