2012-04-07 57 views
2

您好我有一個關於按鈕在asp.net中單擊的疑問,我已經在.aspx頁面中使用OnClick事件和其他一些控件(按鈕,文本框)來放置按鈕控件。當我運行頁面時,按鈕顯示在瀏覽器的頁面源代碼中,就像這裏一樣,它不顯示onclick事件,然後頁面如何調用服務器端的按鈕單擊,服務器端如何識別哪個按鈕導致提交,以及這個頁面如何移動到服務器端。服務器端如何識別按鈕單擊事件

+1

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.usesubmitbehavior.aspx ... http://stackoverflow.com/a/4635993/284240 – 2012-04-07 12:12:19

回答

13

如果它是關於<asp:Button />,則此控件默認呈現輸入type =「submit」,它使用瀏覽器的默認機制提交表單。 ASP .Net通過檢查發佈的值來確定哪個按鈕被點擊。當瀏覽器提交表單時,它會在POST請求中寫入所點擊的按鈕的名稱和值以及其他輸入的名稱和值(不包括其他提交輸入)。因此,單個提交輸入的名稱被髮送到服務器,並以這種方式ASP.Net檢查哪個按鈕被點擊。

此服務器控制也具有屬性UseSubmitBehavior並且如果它被設置爲假,將生成式按鈕的輸入。由於按鈕不提交表單,ASP淨生成一些JavaScript將做的工作

<script type="text/javascript">  
//<![CDATA[  
var theForm = document.forms['form1'];  
if (!theForm) {  
    theForm = document.form1;  
} 

function __doPostBack(eventTarget, eventArgument) {  
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {  
     theForm.__EVENTTARGET.value = eventTarget;  
     theForm.__EVENTARGUMENT.value = eventArgument;  
     theForm.submit();  
    }  
}  
//]]>  
</script> 

通知_ EVENTTARGET _EVENTARGUMENT領域。這些字段被設置爲ASP.Net將知道客戶端上點擊了哪個按鈕。

<input type="button" 
     name="rptMain$ctl02$DeleteButton" 
     value="Delete" onclick="__doPostBack('rptMain$ctl02$DeleteButton','')"   
     id="rptMain_ctl02_DeleteButton" /> 

注意傳遞給__doPostBack函數的參數。輸入的名稱被傳遞並設置爲EVENTTARGET。 EVENTTARGET的值將通過ASP.Net讀取,並基於此將觸發<asp:Button />控件的點擊事件

EVENTARGUMENT由ItemCommand事件使用,通常放置在DataBound控件中幷包含有關該操作的特定數據,稍後在處理事件時使用。該數據可以是例如數據庫表中的行的ID。

+2

This答案是什麼讓我回到堆棧溢出。詳細,詳細和信息。我學到了一些新東西。 +1。 – 2012-04-07 16:49:50

+0

嗨,謝謝你的回覆,如果useubmitbehaviour設置爲true,將調用按鈕控件的事件 – Karthick 2012-04-09 17:52:41

+0

它會生成一個類型爲submit的輸入(這是默認行爲) – 2012-04-10 07:44:44

2

在ASP.NET web窗體中,所有按鈕都會將整個表單提交給服務器。 Web表單引擎檢查按鈕被點擊並調用適當的事件處理程序。

0

如果您指定控件的onclick屬性,則它不會像這樣傳遞給客戶端。相反,它只是規定了IIS接線時解析aspx文件

替代看起來是這樣的:

myControl.Click += new EventHandler(specifiedMethod); 

因此,當事件發生時,它知道該調用哪個方法。