__doPostBack未定义

时间:2010-08-13 20:12:06

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

我尝试在我的某个页面上调用__doPostBack时出现错误,我在项目中的每个页面都使用__doPostBack函数但在此特定页面中我得到了Javascript错误。

我正在互联网上查看,我唯一看到的是当我有一个未关闭的标签时发生这个错误但我查看该网站并确定其正确。

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

26 个答案:

答案 0 :(得分:36)

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

ClientScript.GetPostBackEventReference(this, string.Empty);

答案 1 :(得分:20)

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

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

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

答案 2 :(得分:16)

这就是我发生这种情况的原因:我不小心忘记了脚本标签必须始终有结束标签:

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

我更正了脚本标记:

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

并且恢复了理智。

答案 3 :(得分:13)

只需将此代码添加到.aspx

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

答案 4 :(得分:10)

任何可能导致回发的ASP.NET WebControl都应自动包含

__doPostBack()。你听起来像是在你写的一些Javascript中手动调用它。如果是这样,您将需要包含一个WebControl,以确保将该函数插入页面。

答案 5 :(得分:8)

__ doPostBack工作人员

将此代码写入Page Load

ClientScript.GetPostBackEventReference(this,“”);

答案 6 :(得分:4)

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

答案 7 :(得分:2)

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

答案 8 :(得分:2)

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

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

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

另一种选择:set IE11 Browser definiton file

答案 9 :(得分:2)

基本上发生了什么是有2个缺少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系统在企业面向公众的网站上工作,这可能只是一个更简单的解决方案,而不是可能引入通过更新平台而产生的新错误。

答案 10 :(得分:1)

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

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

谢谢!

答案 11 :(得分:1)

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

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

我确信有更好/更清洁的方法来解决这个问题,但我希望你能理解它背后的想法。

答案 12 :(得分:0)

对我来说,我使用的是自定义用户代理标题 User-Agent: This is a Test, please ignore

这是因为IIS ASP.NET Webforms根据用户代理字符串生成网页。

要解决此问题,我添加了浏览器类型,并在最后添加了一条消息,即

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

页面再次开始正常运行。

答案 13 :(得分:0)

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

答案 14 :(得分:0)

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

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

答案 15 :(得分:0)

Class CustomObject: NSObject {
     //…
     var title: String? = nil
     //…
}

答案 16 :(得分:0)

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

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

答案 17 :(得分:0)

对我来说,“__ doPostBack”在所有页面都不起作用,因为我编译了我的项目 更新版本的Visual stdio然后我双击解决方案资源管理器中的属性,并将.Net框架4.0中的“目标框架”更改为.Net framework 3.0,并在重建项目之后运行。

答案 18 :(得分:0)

我在我的脚本中使用了这个方法,包括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()
}

答案 19 :(得分:0)

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

答案 20 :(得分:0)

旧问题但最近回答:如果您有ScriptManager,请检查是否启用了EnablePartialRendering。如果是这样,请禁用它,我不知道为什么会出现问题......

答案 21 :(得分:0)

我今天遇到了这个问题,但我找不到任何解决方案,不幸的是包括你的。因此,如果有人读了这个并且它对他们不起作用,请试试这个

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

干杯虽然帮助我完成了解决问题的过程!

答案 22 :(得分:0)

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

我在使用JQuery Mobile开发网站时遇到了这些症状,结果发现它是由我所关注的链接导致未设置rel="external"属性的受影响网页引起的。

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

答案 23 :(得分:0)

当我点击LinkBut​​ton时,我得到了这个。通过将OnClick="LinkButton2_Click"添加到标记来解决此问题。

答案 24 :(得分:-1)

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

现在放置你想要回发的html按钮,并通过设置onclick =&#34; __ doPostBack(&#39; mybut&#39;,&#39; save&#39;)来调用__doPostBack函数#34;

现在,html按钮所需的__doPostBack功能由上面的按钮给出。

答案 25 :(得分:-2)

对我而言,页面中缺少以下内容:

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