【问题标题】:Submit button intermittently does nothing in Chrome提交按钮间歇性地在 Chrome 中不起作用
【发布时间】:2011-12-04 20:45:58
【问题描述】:

我有一个带有 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)我发现当我遇到问题时,我可以去工具>清除浏览数据并只检查“清空缓存”并清除它,然后重新加载页面,问题就消失了。在我注销并返回页面之前,我无法复制它。所以似乎和缓存有关

3) 如果没有 UpdatePanel,多个回发似乎也能正常工作。

编辑2: 这是在 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

【问题讨论】:

  • 太糟糕了,您忽略了应用程序构建在 MOSS 之上的重要信息。如果您提供有关问题的所有信息,您会更快地得到答案。
  • 是的,如果我意识到问题是特定于 SharePoint 的,那可能会有所帮助。但是,我的问题不是如何修复错误,而是如何解决错误。这个问题的答案是什么导致我缩小范围,将 SharePoint 作为罪魁祸首。在了解与错误相关的内容之前,我可能还可以包含数千个关于环境、硬件和所涉及软件的其他细节,这些细节可能是相关信息。事实上,包含“所有信息”会产生一本书,这就是我选择询问故障排除步骤的原因。
  • 我很抱歉冒犯了你,这不是我的本意。我在 MOSS 方面也有一些非常有趣的经历,下班后发现不是 asp,不是我的脚本,而是 MOSS 中某个地方的某些东西是罪魁祸首。

标签: asp.net ajax google-chrome sharepoint-2007 updatepanel


【解决方案1】:

我总是推荐Fiddler 来调试http 流量。

【讨论】:

  • 我会使用 Fiddler 仔细检查,但我相信它没有发布,所以没有 HTTP 流量
  • 很高兴知道这一点。我尝试了它并验证它正在运行,但它对解决这个问题没有帮助。我在上面的原始帖子中添加了一些新信息。
【解决方案2】:

您可以使用内置的 Chrome 开发者工具进一步调试问题。虽然没有发布表单,但客户端脚本正在运行。单击扳手按钮>工具>开发者工具,或按 ctrl+shift+I。使用脚本选项卡来调试 javascript。尽管该按钮可能没有与之关联的任何 javascript,但该表单可能具有 OnSubmit 脚本。您可以在该脚本上设置断点。由于自动回发 DropDownList 也不起作用,您可以在 OnChanged 事件上设置断点。 ajax 脚本管理器会自动在 OnChanged 事件中插入一个 setTimeout 脚本,因此捕获它的一种方法是选择 Scripts 窗格右侧的 Event Listener Breakpoints 扩展器,展开计时器,然后检查 Timer Fired 事件。或者您可以在 ScriptResource.axd 文件中搜索函数 Sys$WebForms$PageRequestManager$_doPostBack(eventTarget, eventArgument) 并在那里设置断点,但这可能需要下一步...

让它崩溃是一回事,但拥有可读的脚本是另一回事。默认情况下,ajax 脚本不是很有帮助,但是如果您将站点的 web.config 更改为使用

<compilation Debug="true">.

这将加载您可以单步执行的更易读的 ajax 脚本调试版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    相关资源
    最近更新 更多