【问题标题】:Post back not working in Firefox for asp.net(C#) pages回发在 Firefox 中无法用于 asp.net(C#) 页面
【发布时间】: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

标签: javascript jquery asp.net firefox postback


【解决方案1】:

ASP.Net ScriptManager 代码在 __doPostBack 中使用“caller.callee”向上遍历调用堆栈以检测无限递归。如果调用堆栈中的任何函数被解析为应用了“use strict”,这将在 FireFox 上失败。 解决方法是在“use strict”范围之外有一个调用setTimeout() 的函数来调用调用__doPostBack 的函数。 setTimeout() 让您脱离调用堆栈。

【讨论】:

  • 在这里找到了解决方案:stackoverflow.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" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多