UpdatePanel中的ListView中的LinkButton导致完整的回发

本文关键字:中的 ListView LinkButton UpdatePanel | 更新日期: 2023-09-27 17:49:55

我在UpdatePanel的ListView中有一个LinkButton。我希望按钮(好吧,它们中的任何一个)引起部分回发,但它们引起整个页面回发。

<asp:UpdatePanel ID="upOutcomes" UpdateMode="Conditional" runat="server">
  <ContentTemplate>
      <asp:ListView ID="lvTargets" runat="server" onitemdatabound="lvTargets_ItemDataBound">
        <ItemTemplate>
          <asp:LinkButton ID="lnkAddTarget" CssClass="lo" Text='<%# Eval("Title") + " <b>" + Eval("Level") + Eval("SubLevel") + "</b>" %>' runat="server"></asp:LinkButton>
        </ItemTemplate>
      </asp:ListView>
  </ContentTemplate>
</asp:UpdatePanel>

我在stackoverflow上发现了另一个帖子,建议添加这个:

protected void lvTargets_ItemDataBound(object sender, ListViewItemEventArgs e) {
  var lb = e.Item.FindControl("lnkAddTarget") as LinkButton;
  tsm.RegisterAsyncPostBackControl(lb);  // ToolkitScriptManager
}

没有什么区别…

还有其他一些类似的帖子,但我找不到解决方案!什么好主意吗?

UpdatePanel中的ListView中的LinkButton导致完整的回发

ASP中的ClientIDMode设置。. NET 4允许您指定ASP。. NET为HTML元素生成id属性。

在以前版本的ASP。. NET(即pre 4),默认行为相当于ClientIDMode的AutoID设置。但是,现在默认设置是Predictable

阅读微软文章

AutoId是必需的,因为脚本管理器期望HTML控件在以前的。net版本中生成。

我通过在适用页面的page指令上设置:ClientIDMode="AutoID"来解决这个问题,如下所示:

<%@ Page Title="" ClientIDMode="AutoID" Language="C#"%>

尝试添加CommandName, CommandArgument属性和OnCommand事件处理程序到您的链接按钮,像这样:

<asp:LinkButton CommandName='test' CommandArgument='<%# Eval("Title") %>' ID="lnkAddTarget" runat="server" OnCommand="LinkButtonCommandEventHandler" />

或者-添加OnItemCommand处理器到整个ListView

我通过在适用页面的页面指令上设置:ClientIDMode="AutoID"来解决这个问题,例如:<%@ Page Title="" ClientIDMode="AutoID" Language="C#"%>,从而解决了我以前在ListView中使用ASP链接按钮以导致完整回发的问题。

然而,这可能要求客户端代码(Jquery, Javascript)上的任何ASP控件在浏览器源代码中显示时使用其全名(我使用Firefox中的Firebug来获取名称)。例如,这个Jquery函数$("#ContentPlaceHolder1_btnCancelReferCustomer").click(function () { $("#divRefer").hide({ effect: "slide", duration: 200 }); return false; });更改为以下内容(请注意选择器中的asp按钮名称更改):$("#ctl00_ContentPlaceHolder1_btnCancelReferCustomer").click(function () { $("#divRefer").hide({ effect: "slide", duration: 200 }); return false; });

我通过在适用页面的页面指令上设置:ClientIDMode="AutoID"来解决这个问题:<%@ page Title=" ClientIDMode="AutoID" Language=" c# "%>