ASP.NET __doPostBack在表单标记的开始或结尾之后呈现

时间:2010-08-18 19:24:20

标签: javascript asp.net webforms postback

我正在尝试从我的javascript代码手动调用ASP.NET(3.5)javascript回发函数__doPostBack。问题是通常在<form>标记(以及隐藏字段)开头之后呈现的回发脚本块偶尔会在结束</form>标记附近呈现。

有没有办法强制它在表单标记的开头附近呈现?另外,ASP.NET如何确定何时/何处呈现回发客户端脚本块?

修改&gt;其他信息: javascript代码驻留在引用__doPostBack函数的用户控件中。控件本身不包含任何可以调用该函数的“回发控件”。 (当我提到'回发控件'时,我指的是调用__doPostBack函数而不是asp.net ImageButtonButton控件的ASP.net控件)

基于我观察到的和@Brian关于回发脚本对页面上“回发控件”可用性的依赖性的评论,我发现当页面包含导致回发的控件时,__ doPostBack脚本块在开始<form>标记之后呈现,如果没有,则将它们渲染到结束</form>标记附近(或根据this它甚至不应该呈现)。现在,如果没有需要它的控件,ASP.NET不会渲染回发脚本是有意义的,但是在结束标记附近的脚本的明显位置仍然是我不知道的。我无法找到任何表明此行为的文档。我能找到的只有this

话虽如此,我已经找到了几个解决这个问题的方法:

  1. 添加“回发控件”并将其可见性设置为通过css隐藏(不是Visible属性)。例如。 <asp:LinkButton ID="RequirePostBackScriptLink" runat="server" style="display:none;" />(这就是我正在使用的)
  2. 将控件添加到Page.RegisterRequiresPostBack并实施IPostBackDataHandler界面。
  3. 最后,正如@Jonathan_Bates在帖子中提到的,正确的做法是将__doPostBack的引用包含在作为load(或ready的事件处理程序的函数中。如果你正在使用jquery)。这样,就不需要依赖__doPostBack脚本的实际位置。

    如果有人能提供有关上述行为的更多信息,那就太棒了。

2 个答案:

答案 0 :(得分:2)

我猜测它渲染的位置对你来说很重要,这样你的脚本就可以在它之后渲染并且可以调用它(这让我先说,开始时是一个坏主意)。

您只需要确保用于调用__doPostBack的任何脚本在读入浏览器后调用它。如果你使用像jQuery这样的库及其$(document).ready()约定,你可以确保在加载所有其他代码之前你的代码不会执行,因此你的代码可以调用__doPostBack。 / p>

答案 1 :(得分:0)

其中一些由呈现的控件控制,而页面在预定义的点注入客户端脚本块和启动脚本...

我认为这是一个控件或什么?这不适用于标准块?