__doPostBack未定义

34

在我的一个页面上调用__doPostBack时出现了错误,我在项目中的每个页面都使用__doPostBack函数,但是在这个特定的页面中,我遇到了这个Javascript错误。

我在互联网上搜索,唯一的结果是说当我有一个未关闭的标签时会发生这个错误,但是我检查了整个网站,没有问题。

错误:__doPostBack未定义 源文件:htt://localhost:99/ProjectName/Disable.aspx 行:1


你能发布你的标记吗?你什么时候调用__doPostBack。也许现在还太早了? - KP.
26个回答

47

运行时/客户端错误 __doPostBack 未定义困扰了我几个小时。网络上有很多误导/不正确的帮助。我在 default.aspx.cs 文件的 Page_Load 事件中插入了以下代码行,一切都在我的系统和在使用 GoDaddy 的生产环境中正常工作。

ClientScript.GetPostBackEventReference(this, string.Empty);

4
这很适合在你不想向页面添加一个无意义的网络控件来强迫其创建函数时使用。+1 - Reinstate Monica Cellio

22
如果页面没有控件导致回发,__doPostBack() 就不会作为函数定义输出。一个覆盖此行为的方式是在 Page_PreRender() 中包含这一行代码:
this.Page.ClientScript.GetPostBackEventReference(<a control>, string.Empty);

该函数返回调用 __doPostBack() 的字符串,同时强制页面输出 __doPostBack() 函数定义。


17

只需将此代码添加到您的.aspx文件中即可

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>

其他的建议对我没有起作用,但这个可以——谢谢。 - Action Dan

16
这是为什么会发生这种情况的原因:我不小心忘记了脚本标签必须始终有闭合标签。
<script src="/Scripts/appLogic/Regions.js" />

我更正了脚本标签:

<script src="/Scripts/appLogic/Regions.js" type="text/javascript" ></script>

并且恢复了理智。


+1 - 我的代码也缺少了一个闭合的 </script> 标签。一旦我加上它,我的问题就解决了!谢谢。 - Jesse Webb
我曾经遇到同样的问题,这个方法解决了它。 - ErikusMaximus

10

__doPostBack()应该自动包含在任何可能引起回发(post back)的ASP.NET WebControl中。您听起来像是在一些您编写的JavaScript代码中手动调用它。如果是这样的话,您需要包含一个WebControl来确保该函数被插入到页面中。


是的,但在这种情况下,我必须调用手动回发,我在其他页面中也这样做。 - jmpena
1
嘿,我添加了一个ASP按钮,但没有任何反应,但如果我使用LinkButton它就可以工作,谢谢。 - jmpena

8

__doPostBack工作正常

在Page Load中编写以下代码

ClientScript.GetPostBackEventReference(this, "");


4

3
基本上是这样的,有两个缺少的 html 隐藏元素 "eventtarget" 和 "eventargument",还有一个缺少的函数 "__doPostBack"。
这些在 DOM 中缺失。
我尝试了列出的所有修复方法,但都没有起作用。然而,使用 jQuery 和 JavaScript 的组合可以有一个非侵入式的解决方案。在文档就绪时将此添加到您的 JavaScript 中,您就可以开始了(这比在服务器上安装 .NET Framework 4.5 要快得多,但如果您可以安装 4.5,则应该优先考虑这种方式)。
if ($('#__EVENTTARGET').length <= 0 && $('#__EVENTARGUMENT').length <= 0) {
  $('#YOUR_ASPNET_FORMID').prepend('<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /><input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />');
}

if (typeof __doPostBack == 'undefined') {
  __doPostBack = function (eventTarget, eventArgument) { object
    var theForm = document.forms['YOUR_ASPNET_FORMID'];
    if (!theForm) {
      theForm = document.YOUR_ASPNET_FORMID;
    }
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
      theForm.__EVENTTARGET.value = eventTarget;
      theForm.__EVENTARGUMENT.value = eventArgument;
      theForm.submit();
    }
  };
}

我知道安装4.5版本可以解决这个问题,我强烈推荐这样做。然而,如果你和我一样在一个使用.net 4的企业公共网站上工作,并且内置了cms系统,那么这可能是一个更简单的解决方案,而不是通过更新平台引入新的错误。


2
我的问题解决方案: IIS ASP.NET Webforms 根据用户代理字符串生成网页

我的IIS没有定义IE11浏览器,因此它默认使用非常简单的浏览器配置文件,甚至不支持JavaScript。

  • 短期解决方案:在兼容模式下运行浏览器。
  • 中期解决方案:部署包含IE11浏览器配置文件定义的 .Net Framework 4.5.1。

另一种选择:设置IE11浏览器定义文件


2

当我编写自己的页面代码时,我遇到了这个问题,因为我忘记在表单元素上添加runat="server"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接