双击列表框时导致异步回发

时间:2011-11-06 02:27:07

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

我有一个ASP.NET列表框lstActivities。要编辑列表中的项目,用户可以单击lnkButton或双击列表框。我通过以下方式实现这一目标:

protected void Page_Load(object sender, EventArgs e) {
  if (IsPostBack) return;
  var refDblClick = ClientScript.GetPostBackEventReference(lnkButton, "dblClick");
  lstActivities.Attributes.Add("ondblclick", refDblClick);
}

protected override void Render(HtmlTextWriter writer)
{
  ClientScript.RegisterForEventValidation(lnkButton.UniqueID, "dblClick");
  base.Render(writer);
}

我想改变这一点,以便回发是异步的,使用AJAX。目前,列表框和按钮位于UpdatePanel中,因此单击按钮时会出现异步回发。但是当双击列表框时,会发生完整的回发。

<asp:UpdatePanel ID="up" UpdateMode="Conditional" ChildrenAsTriggers="true"
 runat="server">
  <ContentTemplate>
    <asp:ListBox ID="lstActivities" runat="server"></asp:ListBox>
    <asp:LinkButton ID="lnkButton" runat="server" OnClick="lnkButton_Click">
     Edit</asp:LinkButton>
  </ContentTemplate>
</asp:UpdatePanel>

如何双击只刷新UpdatePanel?

3 个答案:

答案 0 :(得分:1)

要尝试的一些事项:

<asp:UpdatePanel ID="up" UpdateMode="Conditional" ChildrenAsTriggers="true"
 runat="server">
   <Triggers>
      <asp:AsyncPostBackTrigger ControlID="lstActivities" />
       <asp:AsyncPostBackTrigger ControlID="lnkButton" />
   </Triggers>
   .........
</asp:UpdatePanel>

protected void Page_Load(object sender, EventArgs e) {
  if (IsPostBack) return;
  var refDblClick = ClientScript.GetPostBackEventReference(lnkButton, "dblClick");
  lstActivities.Attributes.Add("ondblclick", refDblClick);

  ScriptManager1.RegisterAsyncPostBackControl(lstActivities);
}

答案 1 :(得分:1)

我只是使用您提供的代码进行了快速测试,我确实获得了部分回发&#34; (由于缺少一个更好的术语,因为updatepanels总是做完全回发),点击按钮和双击列表。

如果您在使用UpdatePanel&#34; up&#34;时将该页面中的其他面板设置为UpdateMode="Conditional",那么只有&#34; up&#34;将会被更新。如果您没有在其他面板上指定更新模式,那么它们将始终在回发时更新,因为再次,更新面板始终执行完全回发;他们真正做的是对页面进行部分刷新。

我认为链接MSDN documentation regarding UpdatePanel非常有用。

答案 2 :(得分:1)

我尝试了建议的解决方案,但没有运气。这是一个非常复杂的页面,有很多UpdatePanel,很难解决确切的问题。

最后我去了jQuery:

$(document).ready(function () {
  $(document).delegate('#ctl00_body_lstActivities', 'dblclick', function () {
    eval($('#ctl00_body_lnkButton').attr('href'));
  });
});