0

标题试图总结问题,但这里有一个更详细的总结:我们的网页是用户控件的集合,它们在视觉上呈现为矩形报告小部件,这些小部件设置在 AJAX 更新面板中。我们让用户能够拖放小部件以在页面上预设“区域”。

拖放功能工作正常。我们使用对 Web 服务的 AJAX 调用来使用用户的新设置更新数据库以实现持久性。

当我们从这些小部件之一进行回发时,就会发生“然而”。回发被发送到服务器,它呈现一个更新,该更新被发送回客户端(所有通过 AJAX,因为更新面板)。然后,我们在客户端上收到“找不到带有 ID...的 UpdatePanel”消息,因为文档层次结构已更改,但客户端上的控件 ID 尚未更新。

我们尝试了 Rick Strahl 对此链接文本的解决方案,它允许我们在客户端上创建静态控件 ID。这破坏了回发功能,但是...... isPostBack 属性未设置,我假设是因为服务器无法将控件 ID 与已知的层次结构元素匹配。

我们正在考虑在客户端拖放后使用 Javascript 重置控件 ID。显然,这需要复制 .Net 的命名算法——我们认为这并不聪明。也许我们可以使用一个单独的更新面板并要求服务器在它被删除后向我们发送新的控件 ID?

显然,我们的想法已经不多了。

我意识到这可能太长了,我会很乐意编辑、提供代码示例等来帮助您帮助我们。先感谢您。

4

2 回答 2

0

您可以使用 ASp.Net 的内置系统来处理称为 WebParts 的可拖动页面元素。

该系统适用于回发,并且可以使用 Visual Studio 轻松实现

搜索 webparts 教程,例如:

http://www.ondotnet.com/pub/a/dotnet/2005/01/10/liberty.html

希望这可以帮助

于 2009-03-11T23:18:37.367 回答
0

只是出于兴趣,您是否检查过回发的 UpdatePanel 的 id,并且该 id 是预期的吗?您可以像这样挂钩到 ASP.NET AJAX 的客户端页面生命周期,以检查启动回发的控件的 id

<script type="text/javascript">

  function pageLoad(sender, args)
  {
      var prm = Sys.WebForms.PageRequestManager.getInstance();

      prm.add_initializeRequest(InitializeRequest);
      prm.add_endRequest(EndRequest);

      //fires when an async postback is initialized
      function InitializeRequest(sender, args) 
      {
        alert(args._postBackElement.id)
      }

      //fires when an async postback is complete
      function EndRequest(sender, args) 
      {
        alert(sender._postBackSettings.sourceElement.id)
      }
  }

</script>
于 2009-03-11T23:38:08.320 回答