标题试图总结问题,但这里有一个更详细的总结:我们的网页是一个用户控件的集合,可视化呈现为矩形报告窗口小部件,这些窗口小部件在AJAX更新面板中设置。我们为用户提供了将小部件拖放到页面上预设“区域”的功能。
拖放功能正常。我们使用对Web服务的AJAX调用来使用用户的持久性新设置更新数据库。
当我们从其中一个小部件进行回发时,会发生“但是”。回发被发送到服务器,它呈现更新,然后发送回客户端(所有这些都通过AJAX,因为updatepanel)。然后,我们在客户端上收到“无法找到带有ID的UpdatePanel ...”消息,因为文档层次结构已更改,但控制ID尚未在客户端上更新。
我们尝试了Rick Strahl对此link text的解决方案,这允许我们在客户端上创建静态控件ID。这打破了回发功能,但是... isPostBack属性没有设置,我假设因为服务器无法将控件ID与已知的层次结构元素匹配。
我们正在考虑在使用Javascript拖放后,可能会在客户端重置控件ID。显然,这需要重复.Net的命名算法 - 不是聪明的,我们正在考虑。也许我们可以使用单独的updatepanel并要求服务器在删除后向我们发送新的控件ID?
显然,我们的想法已经不多了。
我意识到这可能太长了,我很乐意编辑,提供代码示例等,以帮助您帮助我们。提前谢谢。
答案 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>