2009-10-13 31 views
9

我有一個html按鈕,請參見下文。當它被點擊並且AutoEventWireup =「true」時,Save_Click點擊處理程序被觸發兩次。當AutoEventWireup =「False」時,它會觸發一次。HtmlButton處理程序在單擊時觸發兩次(當AutoEventWireup =「True」時)

爲什麼它會發射兩次?該按鈕沒有被註冊兩次,也沒有添加事件處理程序的代碼。使用母版頁並且沒有Ajax。

<button id="Save" accesskey="v" type="submit" runat="server" onserverclick="Save_Click"></button> 
+0

必須有其他的一些代碼,使其火,我想我們需要看到所有相關代碼的頁面。這個按鈕本身不太可能。 – kscott 2009-10-13 20:13:06

回答

10

好吧,我發現一個HTMLButton觸發onserverclick事件和type =「submit」。當我刪除type =「submit」時,它會觸發一次。這種古怪的行爲花了我很長時間才發現!

+4

在我的情況下,我沒有告訴它使用type =「submit」,我只是沒有指定類型。我明確指定了type =「button」,之後它就被修復了。 – Peter 2013-05-03 13:33:57

+2

根據您正在運行的ASP.NET版本或您使用的瀏覽器的不同,這具有有趣的不同行爲。例如,我沒有指定'type',它在Fireofox上工作正常,但Chrome認爲它是一個'submit'而不是'button' – 2015-02-05 16:06:13

0

只是一個猜測:處理程序沒有被觸發了兩次,但是你已經設置了在Page_Load事件,使得它看起來是射擊兩次類似的行爲。

+0

處理程序中的斷點在頁面返回之前被命中兩次。處理程序在表中插入一條記錄,並看到兩條記錄。插入代碼中沒有其他地方,並且沒有數據庫觸發器。 – 2009-10-13 20:08:51

+0

我會第二個kscott ...我們能看到更多的代碼嗎? – 2009-10-13 21:24:23

19

現在(至少在.NET 4)甚至更好:

<button runat="server"> 

默認的行爲,因爲它具有類型=「提交」(上點擊兩次火災),所以它才能正常工作,我們應明確設置類型=「按鈕」,即:

<button id="ButtonSubscribe2" runat="server" type="button" onserverclick="Save_Click"></button> 
+0

解決了我的問題。謝謝! – jmotes 2014-01-21 17:53:05

+0

它解決了我的問題! :) 謝謝! – 2014-12-04 12:04:38

+0

不錯的一點,謝謝 – 2015-01-15 19:13:28

相關問題