【问题标题】:Cause an async postback when a listbox is double-clicked双击列表框时导致异步回发
【发布时间】:2011-11-06 02:27:06
【问题描述】:

我有一个 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?

【问题讨论】:

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


    【解决方案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);
    }
    

    【讨论】:

      【解决方案2】:

      我只是对您提供的代码进行了快速测试,在单击按钮和双击列表。

      如果您将该页面中的其他面板设置为UpdateMode="Conditional",就像您对 UpdatePanel "up" 所做的那样,那么只有 "up" 内的元素会被更新。如果您没有在其他面板上指定更新模式,那么它们将始终在回发时更新,因为更新面板总是会进行完整回发;他们真正做的是页面的部分刷新。

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

      【讨论】:

        【解决方案3】:

        我尝试了建议的解决方案,但没有成功。这是一个相当复杂的页面,其中包含大量 UpdatePanel,因此很难解决确切的问题。

        最后我选择了 jQuery:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-12-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-10
          • 2012-01-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多