2010-07-27 36 views
0

我在ASP .NET頁面上有一個表單,帶有附加到doPostBack功能的按鈕onclick事件。 但是,當我點擊該按鈕表單提交兩次。服務器端調試器進入Page_Load兩次,Fiddler記錄兩個aspx請求等,沒有302重定向等,這是非常簡單的頁面。查找在ASP .NET中提交表單的地方

當我在__doPostBack函數中設置斷點時,它也被調用一次(也許它只是一個錯覺)。

是否有機會更深入地調試客戶端以找到問題?

謝謝你,帕維爾

回答

1

好的。得到它:輸入類型= 「形象」 了

onclick="__doPostBack(.....)" 

當我修改它:

onclick="_doPostBack(...); return false;" 

和兩個請求的問題就走了。只有一個請求被Fiddler錄製,Page_Load被調用一次,一切都很整潔。

所以使用造成點擊自動錶單提交的HTML元素時要小心;)

謝謝你,帕維爾

+0

我很高興你找到它。同樣的事情也發生在我身上。今天我總是避免直接使用onclick屬性,而是傾向於使用jquery的綁定/點擊。通過這種方式,您可以獲得一致的編程模型,這種編程模型在瀏覽器之間不會發生變化,並且可以更好地區分標記和JavaScript代碼 – cjberg 2010-07-30 15:50:33

1

你手動關聯起來的事件處理程序?如果是這樣,你應該檢查ASPX的Page指令中的AutoEventWireup =「true」。如果是,請將其更改爲false或取消手動佈線。使用設計器文件將舊頁面升級到較新的Web應用程序格式時,可能會發生這種情況。

+0

AutoEventWireup =「真」,但我爲什麼要改變它爲false和刪除手動佈線? – dragonfly 2010-07-27 14:18:30

+0

要麼有autowireup = true *要麼*刪除手動接線。 – TheGeekYouNeed 2010-07-27 14:53:44

+0

在AutoEventWireup =「True」的情況下,ASP.NET將自動連接常見的事件處理程序,如Page_Load,因此您不需要手動執行它(它可以幫助您避免這種無趣的樣板代碼)。但是,如果您在代碼中執行此操作,則必須設置AutoEventWireup =「false」,否則您最終會以事件處理程序註冊兩次,因此也會調用兩次。我建議刪除手動佈線,因爲較少的樣板代碼等於更好的可讀性,這很重要。 – cjberg 2010-07-27 15:11:54

0

聽起來好像有兩件事導致回發。該按鈕是一個提交按鈕,還有一個onclick處理程序?那會導致這種行爲。

您在提琴手中看到的2個ASPX請求是相同還是略有不同?

+0

這些請求包含相同的表單數據等... 它的輸入,type =「image」與onclick =「__ doPostBack ...」。 – dragonfly 2010-07-27 14:15:42