__doPostBack未定义

34

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

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

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


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

2

对我来说,问题出在我使用了一个自定义的 User-Agent 头部,其内容为: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)

页面又开始正常运行了。


1

我知道这个帖子已经很久没有活跃了,但是我会为那些未来的读者添加一些小贴士。

ClientScriptManager类有几个可用的方法,使得处理JavaScript postbacks更加方便。特别是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

我相信有更好/更干净的方法来连接它,但我希望你能理解它背后的思想。


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

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

谢谢!


这对我也完全奏效了!我仍然想知道为什么它是未定义的... - harsimranb

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

0
将我的服务器端控件用带有runat="server"属性的form元素包装起来对我很有效。根据ASP环境,应该只有一个带有runat="server"属性的form元素,否则可能会出现一些严重问题。
<form runat="server" id="form1">
   <!-- Server side controls go here -->
</form>

0

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

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

0

虽然这是一个老问题,但最近有了答案:如果你有一个 ScriptManager,请检查是否启用了 EnablePartialRendering。如果是,请禁用它,我不知道为什么会出现这个问题...


0

我曾经遇到过这个问题,有时候只是因为自己太蠢了。我把它写成了小写字母'b'的__doPostback,而实际上应该是大写字母'B'的__doPostBack。


0

1
Colin,感谢您在这里发布博客链接。虽然我没有解决我的问题,但它让我的一天更加美好! - Paul Keister

0

对我来说,"__doPostBack" 在所有页面中都无法工作,因为我使用了比较新的 Visual Studio 版本编译了我的项目,然后我在解决方案资源管理器中双击属性并将 "目标框架" 从 .Net Framework 4.0 更改为 .Net Framework 3.0,之后重新构建项目,它就可以工作了。


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