2010-07-30 60 views
1

我们的一个ASP.NET WebForms 3.5页面突然决定不再渲染__doPostBack() javascript方法以及支持<hidden>字段。强制ASP.NET WebForms呈现__doPostback()脚本

一切似乎在页面上确定 - 我唯一改变的事情是,我去掉一个SelectList控制回传处理程序,改变AutoPostbackTrueFalse同一控制。页面上还有其他几个(未更改)元素具有回发处理程序。

我也在页面上使用jQuery验证,但它在工作之前就像一个魅力,而且我没有改变JavaScripts中的任何东西。是的,我已经看过this question,但该解决方案并不适用于我 - 目前我们没有使用任何缓存。

UPDATE:
看来,ASP.NET是决定不需要我的客户端脚本,因为没有控制是depending on postback。但是,我有一个提交按钮控件,它在服务器端有一个事件处理程序,并且该事件处理程序永远不会被调用 - 我怀疑这是因为按钮允许只是一个常规的<input type="submit">并提交标准HTTP方式,而不是使用ASP.NET __doPostBack脚本。

这是我的控制(可见的代码隐藏设置为True):

<asp:Button ID="SaveNewButton" runat="server" CssClass="inputbutton" 
    Visible="false" OnClick="SaveNewButton_Click" /> 

而且这是在代码隐藏的处理方法:

Protected Sub SaveNewButton_Click(ByVal sender As Object, 
    ByVal e As System.EventArgs) Handles SaveNewButton.Click 

如何强制ASP .NET来渲染用于回发的客户端脚本,所以我的事件处理程序被调用?

回答

1

问题是,正如tdammers所指出的那样,ASP.NET只在它认为需要时呈现__doPostback() javascript,在这种情况下,它并不这么认为。该解决方案是给我a thread at forums.asp.net,是如此简单:

上应与__doPostBack(),而不是使用浏览器的默认行为提交提交按钮设置UseSubmitBehavior="False"

0

您的<表格>标签仍然具有runat =“server”属性吗?

+0

是的,它的确如此,就像页面上的所有其他服务器控件一样。 – 2010-07-30 09:00:44

2

IIRC,ASP.NET仅在需要时才会呈现__doPostback()javascript,也就是说,如果页面上有控件需要触发回发,而它们呈现的HTML控件本身不会执行此操作。一个按钮可以通过定期的非脚本提交触发回发,因此您的下拉菜单可能是唯一需要脚本回发的控件。当您将其autopostback属性更改为false时,您可能已经删除了__doPostback,因此ASP.NET不再显示它。

+1

这似乎是合理的。有没有办法强制ASP.NET呈现脚本? – 2010-07-30 09:01:00

+0

@Stan下面的答案包括强制脚本呈现的方法。 – Kasaku 2015-08-25 16:33:05

1

如果您通过Google找到此问题,则问题在于仅在需要时才包含__doPostBack。如果您没有任何控件导致脚本被ASP.NET自动包含,您可以拨打

 page.ClientScript.GetPostBackEventReference(New Web.UI.PostBackOptions(Me.page)) 

而ASP.NET将包含回发脚本。简单。

您可以在PreRender事件处理程序中执行此操作。

REF http://forums.asp.net/t/1584561.aspx?Forcing+ASP+NET+to+render+__doPostBack+scripts