【问题标题】:LinkButton in ListView in UpdatePanel causes full postbackUpdatePanel 中 ListView 中的 LinkBut​​ton 导致完全回发
【发布时间】:2011-08-04 21:28:41
【问题描述】:

我在 UpdatePanel 的 ListView 中有一个 LinkBut​​ton。我希望按钮(嗯,其中任何一个)导致部分回发,但它们会导致整页回发。

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

这并没有什么不同...

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

【问题讨论】:

  • 刚试过,谢谢。虽然没有运气。 :( 无论如何我都需要它有条件地更新。
  • 尝试使用将更新面板的控件填充 集合,即使该控件位于面板内。
  • 我最终需要在 Page 指令中设置 ClientIDMode="AutoID"。不知道为什么——但它奏效了!我希望这可以帮助下一个遇到此问题的人。
  • 我建议您将最后一条评论添加为“答案”,这样以后的搜索者会发现它更容易:)
  • 我遇到了同样的问题,我通过使用OnItemCreated 而不是OnItemDataBound 使其在没有AutoID 的情况下工作。显然,如果您使用第二个,则 UpdatePanel 仅适用于一个异步回发!第二次尝试总是会导致完整的回发,我不知道为什么......

标签: c# asp.net ajax listview asp.net-ajax


【解决方案1】:

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

在以前的 ASP.NET 版本(即 pre 4)中,默认行为等同于 ClientIDMode 的 AutoID 设置。但是,默认设置现在是可预测的

Read Microsoft Article

由于脚本管理器希望在以前版本的 .NET 中生成 HTML 控件的方式,因此需要 AutoId。

【讨论】:

  • 谢谢。这让我疯了半天。就我而言,我必须为链接按钮添加一个 ID,并将 AutoID 放入页面指令中。
  • 半天?我已经为此工作了一个多星期.. 我确定这是我的 UpdatePanel 或我正在使用的其他一些古怪的控件。原来这只是我的链接按钮.. gaah...
  • 谢谢我的好人。我从 DataList 切换到 ListView,但无法弄清楚为什么我的 UpdatePanel 突然停止工作
  • 非常感谢!在 中添加了 ClientIDMode="AutoID" 作为属性,已修复! +1
【解决方案2】:

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

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

这工作正常。

【讨论】:

    【解决方案3】:

    尝试将CommandNameCommandArgument 属性和OnCommand 事件处理程序添加到您的链接按钮,如下所示:

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

    或者 - 将 OnItemCommand 处理程序添加到整个 ListView。

    【讨论】:

    • 感谢您的想法,但这并没有什么不同。
    【解决方案4】:

    我通过在适用页面的页面指令上设置:ClientIDMode="AutoID" 解决了这个问题,如下所示:&lt;%@ Page Title="" ClientIDMode="AutoID" Language="C#"%&gt;,从而解决了我之前在 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; });

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 2011-02-10
        • 1970-01-01
        • 2013-07-02
        • 1970-01-01
        • 2011-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多