我有一个带有UpdatePanel的UserControl。在更新面板中是DropDownList。更改节时,将加载DataList并使提交按钮可见。提交按钮在IE和FireFox中运行良好,但在Chrome中,它间歇性地似乎什么都不做(也就是说,很多时候它在Chrome中工作正常)。当它不起作用时,更新面板的asp.net ajax UpdateProgress模板不会显示,也没有回发到服务器。 UpdatePanel具有ChildrenAsTriggers = true且按钮是子项。该按钮已启用,我在Chrome开发人员工具控制台中没有收到任何脚本错误。我也没有任何服务器端异常。没有自定义的javascript附加到按钮:
<asp:Button ID="btnContinue" runat="server" Text="" CssClass="btn_continue" OnClick="btnCheckOut_Click" />
当我点击按钮时,如何进一步调试正在发生(或不发生)的事情?
编辑:这是一些新信息:
1)问题发生时,后续回发没有效果。我从下拉列表中选择一个项目,它以异步方式回发,然后按钮和再次更改下拉列表选择都不会导致回发。
2)我发现当我遇到问题时,我可以转到工具&gt;清除浏览数据并仅检查“清空缓存”并清除它,然后重新加载页面,问题就消失了。在我退出并返回页面之前,我无法重现它。所以似乎与缓存相关。
3)如果没有 UpdatePanel ,多个回发似乎都能正常工作。
EDIT2: 这在SharePoint 2007中运行,这显然是一个重要因素。母版页在其主体OnLoad中使用共享点脚本INIT.JS并形成OnSubmit事件来执行某些操作。它做的一件事是设置一个标志,指示表单是否已提交,并在OnLoad中将其设置为false。 OnLoad函数也基本上绕过了ajax回发的过程。问题是Chrome没有执行OnLoad事件,因此不会绕过进程,标志永远不会被设置为false,并且OnSubmit函数会拒绝连续提交。我在这里找到了一个探索该问题的主题:http://social.msdn.microsoft.com/Forums/en-ca/sharepointgeneral/thread/97ff77d1-31d4-45ff-af6e-524416cdff1c
答案 0 :(得分:0)
我总是建议Fiddler调试http流量。
答案 1 :(得分:0)
您可以使用内置的Chrome开发人员工具进一步调试问题。虽然表单未发布,但仍有客户端脚本在运行。单击扳手按钮&gt;工具&gt;开发人员工具,或按ctrl + shift + I。使用“脚本”选项卡调试javascript。虽然该按钮可能没有与之关联的任何javascript,但该表单可能具有OnSubmit脚本。您可以在该脚本上设置断点。由于自动回发DropDownList也不起作用,您可以在OnChanged事件上设置断点。 ajax脚本管理器会自动在OnChanged事件中插入setTimeout脚本,因此捕获它的一种方法是选择Scripts窗格右侧的Event Listener Breakpoints扩展器,展开timer,并检查Timer Fired事件。或者您可以在ScriptResource.axd文件中搜索函数Sys $ WebForms $ PageRequestManager $ _doPostBack(eventTarget,eventArgument)并在那里设置断点,但这可能需要下一步...
让它破解是一回事,但拥有可读的脚本是另一回事。默认情况下,ajax脚本不是很有用,但如果您将站点的web.config更改为使用
<compilation Debug="true">.
这将加载一个更易读的ajax脚本调试版本,您可以单步执行。