ASP.Net,拖放,回发和控制ID

时间:2009-03-11 23:03:16

标签: javascript asp.net-ajax user-controls updatepanel

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

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

搜索webparts教程,例如:

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

希望这有帮助

答案 1 :(得分:0)

出于兴趣,您是否检查了回发的UpdatePanel的ID,并且是预期的id?你可以像这样挂钩到ASP.NET AJAX的client page lifecycle来检查启动回发的控件的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>