回发在 Firefox 中无法用于 asp.net(C#) 页面
Posted
技术标签:
【中文标题】回发在 Firefox 中无法用于 asp.net(C#) 页面【英文标题】:Post back not working in Firefox for asp.net(C#) pages 【发布时间】:2015-02-17 04:07:20 【问题描述】:我在使用 Mozilla firefox 时遇到问题。
我正在使用 asp.net 语言开发一个网站,并且我在表单中有一个按钮。当我单击 onclick 属性上的按钮时,我正在调用一个函数,并且该函数正在执行回发。
这个场景正在运行 chrome 和 internet explorer。但它不适用于 Mozilla Firefox。我在控制台中收到此错误:TypeError: access to strict mode caller function is censored..
我的示例按钮是:
<input id="Button1" type="button" onclick="sampleFunc('sample');" value="button" />
我的示例函数是:
function sampleFunc(reqMessage)
__doPostBack('', reqMessage);
我在网上搜索过。很多人有rhis问题,但没有任何解决方案。
你对这个错误有什么解决方案吗(!)
编辑 1: 我在 jquery 网站上找到了 ticket。根据勾选,他们修复了那个错误。但是我应用了相同的解决方案,但我的错误仍在继续。 :(
【问题讨论】:
尝试将按钮ID与帖子一起发送,即__doPostBack(ButtonID, reqMesage).. 您是在使用 我正在使用 hrml 按钮。我的意思是 使用浏览器的开发者工具,在所有包含的脚本中搜索"use strict"
。有没有发生?
我已经为此创建了一个bug report。
【参考方案1】:
ASP.Net ScriptManager 代码在 __doPostBack 中使用“caller.callee”向上遍历调用堆栈以检测无限递归。如果调用堆栈中的任何函数被解析为应用了“use strict”,这将在 FireFox 上失败。
解决方法是在“use strict”范围之外有一个调用setTimeout()
的函数来调用调用__doPostBack
的函数。 setTimeout()
让您脱离调用堆栈。
【讨论】:
在这里找到了解决方案:***.com/a/25686598/12919 并且它有效,但我想了解为什么它有效,所以一直在寻找,直到我找到你的答案。谢谢你的解释。【参考方案2】:我终于找到了答案。
我正在使用alertfy javascript 库来弹出消息。该库正在使用“使用严格”表达式。
我从这个库中删除了这个表达式,现在没有问题了。我的代码适用于所有浏览器。
【讨论】:
这让我免于被解雇。在我的情况下,我必须下载jquery 3.x
CDN 以在我的项目中本地引用它,然后删除 Use strict;
的所有实例。
alertify javascript 库中必须使用“Use strict”表达式。实际上,该表达式必须在所有 javascript 文件中使用。它组织 javascript 文件。我认为,有一些异常或错误代码是 alertify js。由于这个原因,我们得到了一个错误。所以,我们现在必须删除那个表达式。【参考方案3】:
我的建议是保持 javascript 和 html 分开..而不是使用内联调用你可以试试这个方法
请注意,您必须加载 jquery 才能使其工作。
例如:
<script>
$(document).ready(function()
$(#Button1).click(function()
PostBack();
);
);
</script>
<input id="Button1" type="button" value="button" />
【讨论】:
【参考方案4】:我有一个好消息,这个问题可能在最新的 Firefox 和 jQuery 3.5.1 中得到修复。 我今天测试了报告的场景以及与“使用严格”规则相关的其他 __doPostBack 问题场景,所有这些场景似乎都可以正常工作,没有任何 JS 错误。
您在使用最新的 jQuery 3.5.1 和最新的 Firefox 84.0.2 时仍然遇到这个问题吗?
【讨论】:
Web UI JS 框架增强了很多。我不再使用 PostBack 了 :)【参考方案5】:这是一种解决方法 -
将服务器端按钮控制器添加到您的 aspx 页面 -
<asp:Button id="btn" runat="server" onclick="btn_click_event" ClientIDMode="static"/>
在您的代码隐藏页面 (aspx.cs) 上定义将在回发后执行实际工作的事件方法。 现在隐藏这个按钮控制器。
<asp:Button id="btn" runat="server" onclick="btn_click_event" ClientIDMode="static" style="display:none" />
不要使用Visible=false
,因为它根本不会呈现按钮。
现在将您的 javascript 函数更改为仅在 `btn' 上调用 click
function sampleFunc()
$('#btn').click();
并在您的 HTML 输入按钮 onclick 方法中调用此函数 -
<input id="Button1" type="button" onclick="sampleFunc();" value="button" />
【讨论】:
以上是关于回发在 Firefox 中无法用于 asp.net(C#) 页面的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET 部分回发上的 Chrome 自动填充(更新面板)
ASP.Net 脚本控件,从 OnClick 和 FireFox 返回 False
ASP.NET 在 asp:ImageButton 上没有回发
ASP.NET,使用 .Controls.Add() 添加的控件在页面回发时丢失,如果我使用 .InnerHtml 添加它们,我无法引用它们