【问题标题】:__doPostBack is not defined__doPostBack 未定义
【发布时间】:2011-03-29 15:57:34
【问题描述】:

当我尝试在我的一个页面上调用 __doPostBack 时出现该错误,我在项目中拥有的每个页面都使用 __doPostBack 函数,但在这个特定页面中我得到了那个 Javascript 错误。

我在网上看,我唯一读到的是这个错误发生在我有一个未关闭的标签但我查看了网站并且它没问题的时候。

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

【问题讨论】:

  • 你能发布你的标记吗?你什么时候打电话给__doPostBack。也许为时过早?

标签: c# javascript asp.net visual-studio


【解决方案1】:

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

ClientScript.GetPostBackEventReference(this, string.Empty);

【讨论】:

  • +1 当您不想向页面添加无意义的 Web 控件只是为了强制它创建功能时,这是完美的选择。
【解决方案2】:

如果页面没有导致回发的控件,__doPostBack() 将不会作为函数定义输出。覆盖它的一种方法是将此行包含在您的 Page_PreRender() 中:

this.Page.ClientScript.GetPostBackEventReference(<a control>, string.Empty);

这个函数返回一个调用__doPostBack()的字符串;但也会强制页面输出 __doPostBack() 函数定义。

【讨论】:

    【解决方案3】:

    这就是发生在我身上的原因:我不小心忘记了脚本标签必须总是有结束标签:

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

    我更正了脚本标签:

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

    又恢复了理智。

    【讨论】:

    • +1 - 我的代码也缺少结束 &lt;/script&gt; 标记。一旦我包含它,我的问题就消失了!谢谢。
    • 我遇到了同样的问题,这解决了它。
    【解决方案4】:

    只需将此代码添加到您的 .aspx 中

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

    【讨论】:

    • 其他建议对我不起作用,但确实如此 - 谢谢
    【解决方案5】:

    __doPostBack() 应自动包含在任何可能导致回发的 ASP.NET WebControl 中。您听起来好像是在您编写的一些 Javascript 中手动调用它。如果是这样,您将需要包含一个 WebControl,以确保将该功能插入到页面中。

    【讨论】:

    • 是的,但在这种情况下,我调用手动回发,我在其他页面中这样做
    • 嘿,我添加了一个 asp 按钮,但没有任何反应,但如果我使用 LinkBut​​ton,它的工作原理,谢谢
    【解决方案6】:

    __doPostBack 工作人员

    在页面加载中编写此代码

    ClientScript.GetPostBackEventReference(this, "");

    【讨论】:

      【解决方案7】:

      尝试调用RegisterRequiresPostBack 方法。它应该使 ASP.NET 运行时包含 __doPostBack 代码。

      【讨论】:

        【解决方案8】:

        基本上发生了什么是缺少 2 个 html 隐藏元素“eventtarget” 和“eventargument”,以及缺少的函数“__doPostBack”。

        DOM 中缺少这些。

        我尝试了为此列出的所有修复程序,但都没有奏效。然而,使用 jquery 和 javascript 的组合有一个不显眼的解决方案。将此添加到您的 javascript 上准备好文档,然后您就可以参加比赛了(这比在您的服务器上安装 .net 框架 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 系统的企业公共网站上工作,那么这可能只是一个更简单的解决方案,而不是可能引入因更新您的平台而产生的新错误。

        【讨论】:

          【解决方案9】:

          我在编写自己的页面代码并忘记将runat="server" 放在表单元素上时遇到了这个问题。

          【讨论】:

            【解决方案10】:

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

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

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

            另一种选择:set IE11 Browser definiton file

            【讨论】:

              【解决方案11】:

              对我来说,这是我使用 自定义 User-Agent Header 的事实 User-Agent: This is a Test, please ignore.

              这是因为 IIS ASP.NET Webforms 根据 User-Agent 字符串生成网页。

              为了解决这个问题,我添加了浏览器类型,并在末尾添加了一条消息,即

              User-Agent: Mozilla/5.0 (X11; Linux x86_64) Chrome/75.0.3770.80 (This is a Test, please ignore)
              

              页面又开始正常运行了。

              【讨论】:

                【解决方案12】:

                我知道这个帖子已经有一段时间没有活跃了,但我会为将来的人添加另一个花絮。

                ClientScriptManager 类有几个方法可以更好地处理 JavaScript 回发。特别是GetPostBackClientHyperlink 例程。它返回一个字符串,然后您可以将其分配给元素的 onclick 客户端事件。每当您使用此方法时,__doPostBack 例程和任何必要的隐藏表单字段都会自动生成,而且您不必自己编写 JavaScript。例如,我在 Page_Load 中有这个:

                lnkDeactivate.Attributes("onclick") = ClientScript.GetPostbackClientHyperlink(lnkDeactivate, "deactivate")
                

                在这种情况下,ClientScript 是页面自动提供的 ClientScriptManager 对象实例...我没有实例化它。在回发时,我使用此代码来检测事件:

                If Not String.IsNullOrEmpty(Request("__EVENTARGUMENT")) AndAlso Request("__EVENTARGUMENT") = "deactivate") Then
                  '-- do somthing
                End If
                

                我确信有更好/更简洁的方法来连接它,但我希望你明白它背后的想法。

                【讨论】:

                  【解决方案13】:
                   this.Page.ClientScript.GetPostBackEventReference(<a control>, string.Empty); 
                  

                  这个技巧对我有用。仍然想知道为什么它没有渲染......

                  谢谢!

                  【讨论】:

                  • 这对我也很有帮助!我仍然想知道为什么它是未定义的......
                  【解决方案14】:

                  我今天遇到了这个问题,但我找到的解决方案都没有奏效,不幸的是包括你的。因此,如果有人读了这篇文章但对他们不起作用,试试这个

                  http://you.arenot.me/2010/11/03/asp-net-__dopostback-is-not-defined/

                  感谢您帮助我解决问题所在的过程!

                  【讨论】:

                  • Colin,感谢您在此处发布指向您博客的链接。我没有解决我的问题,但它让我的日子更美好了!
                  【解决方案15】:

                  我得到这个是因为我的脚本在一个被“处置”的 iframe 中(它是一个关闭的 Telerik“窗口”)。在我的 iframe 中定义 _dopostback() 的代码已经消失,但在我的 iframe 中调用 _dopostback() 的代码仍然存在。喜欢 JavaScript!

                  【讨论】:

                    【解决方案16】:

                    当我单击链接按钮时,我得到了这个。通过在标记中添加OnClick="LinkButton2_Click" 解决了这个问题。

                    【讨论】:

                      【解决方案17】:

                      这个老式线程的另一个补充......

                      我在使用 JQuery Mobile 开发网站时遇到了这些症状,事实证明这是由于我指向受影响页面的链接没有设置 rel="external" 属性引起的。

                      这意味着 JQuery 通过 AJAX 加载新页面的内容,并将它们“注入”到当前页面中,而不是重新加载整个内容,因此所需的回发 javascript 在整个页面刷新之前不存在。

                      【讨论】:

                        【解决方案18】:

                        老问题但最近的答案:如果您有ScriptManager,请检查EnablePartialRendering 是否已启用。如果是这样,禁用它,我不知道为什么它是一个问题......

                        【讨论】:

                          【解决方案19】:

                          我有这个问题,有时只是愚蠢。我把它写成带有小写'b'的__doPostback,它应该是带有大写'B'的__doPostBack。

                          【讨论】:

                            【解决方案20】:

                            我在包含在 asp.net 表单中的脚本中使用了这种方法:

                            main form id sample:
                            <script src="myscript" />
                            
                            <form id="frmPost" runat="server">
                            </form>
                            
                            // myscript.js in java script function
                            mypostboack: function () {
                            $('#frmPost').context.forms[0].submit()
                            }
                            

                            【讨论】:

                              【解决方案21】:

                              对我来说,“__doPostBack”并非在所有页面中都有效,因为我编译了我的项目 较新版本的 Visual stdio 然后我双击解决方案资源管理器中的属性并将“目标框架”从 .Net 框架 4.0 更改为 .Net 框架 3.0,然后重建项目并且它工作。

                              【讨论】:

                                【解决方案22】:

                                我遇到了这个错误,我通过插入解决了它:

                                <form runat="server" style="display: none"></form>
                                

                                【讨论】:

                                  【解决方案23】:
                                  lnkDeactivate.Attributes("onclick") = ClientScript.GetPostbackClientHyperlink(lnkDeactivate, "deactivate")
                                  

                                  【讨论】:

                                    【解决方案24】:

                                    runat="server" 属性将我的服务器端控件包装在form 元素中对我有用。根据asp环境,form元素中应该只有一个runat="server"属性,否则可能会出现一些严重的问题。

                                    <form runat="server" id="form1">
                                       <!-- Server side controls go here -->
                                    </form>
                                    

                                    【讨论】:

                                      【解决方案25】:

                                      是__doPostBack function not found 错误。在页面中放置一个按钮并设置其usersubmitbehavior=false,然后运行并查看viewsource,您将在页面中自动添加__doPostBack功能。

                                      现在放置你自己的 html 按钮,你想从中进行回发,并通过设置它的 onclick="__doPostBack('mybut','save')" 来调用 __doPostBack 函数。

                                      现在,您的 html 按钮所需的 __doPostBack 函数由上述按钮提供。

                                      【讨论】:

                                        【解决方案26】:

                                        对我来说,页面中缺少以下内容:

                                        <form runat="server">
                                        </form>
                                        

                                        【讨论】:

                                          猜你喜欢
                                          • 2013-02-22
                                          • 2016-06-26
                                          • 2013-11-23
                                          • 2013-12-16
                                          • 2013-06-29
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 2012-10-23
                                          • 1970-01-01
                                          相关资源
                                          最近更新 更多