2010-07-30 55 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