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。