标题试图总结问题,但这里有一个更详细的总结:我们的网页是一个用户控件的集合,可视化呈现为矩形报告窗口小部件,这些窗口小部件在AJAX更新面板中设置。我们正在为用户提供将小部件拖放到预先设置<!>“区域<!>”的功能。在页面上。

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

<!>“然而<!>”;当我们从其中一个小部件进行回发时会发生这种情况。回发被发送到服务器,它呈现更新,然后发送回客户端(所有这些都通过AJAX,因为updatepanel)。然后我们得到一个<!>“;找不到带有ID的UpdatePanel ... <!>”;客户端上的消息,因为文档层次结构已更改,但控制ID尚未在客户端上更新。

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

我们正在考虑在使用Javascript拖放后,可能会在客户端重置控件ID。显然,这需要重复.Net的命名算法 - 不是聪明的,我们正在考虑。也许我们可以使用单独的updatepanel并要求服务器在删除后向我们发送新的控件ID?

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

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

有帮助吗?

解决方案

出于兴趣,您是否检查了回发的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>

其他提示

您可以将ASp.Net的内置系统用于名为WebParts的可拖动页面元素。

系统使用回发,可以使用Visual Studio轻松实现

搜索webparts教程,例如:

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

希望这有帮助

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top