如何檢查在頁面的Page_Load
中單擊了哪個LinkButton
。 這是爲了避免調用服務,以便它只執行其事件中存在的內容。如何驗證在Page_Load上在asp.net中單擊哪個LinkButton
回答
您的意思是說,您只是試圖在頁面上的其他回發事件觸發時保持Page_Load代碼不被執行?如果是這樣的話,把它包裝:
if (!IsPostBack)
(恕我直言,這是一個有點被WebForms的事件模型必要一個黑客,但它是什麼。)
還是我誤解你的問題?
至於用於識別特定的LinkButton,你可以使用的CommandName參數:
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.linkbutton.commandname.aspx
我以前要做到這一點,因爲在事件處理已經來不及了。你可以使用javascript來編寫被點擊到隱藏字段的按鈕的ID。比你可以在Page_Load中檢索它。如果我沒有記錯,其他方法是查看_EVENTTARGET隱藏字段,這是一段時間。
你也可以聲明一個LinkButton類型的變量(或者Control或者其他),並且讓按鈕在click事件中通過引用來更新它們,然後檢查Load的值。
您的Page_Load
應該運行的唯一一件事是您希望始終發出每一個請求的代碼,或者讓您只需運行一次即可在運行後檢查中運行的代碼。例如:
protected void Page_Load(object sender, EventArgs e)
{
// Put the all code you need to run with EVERY request here
// Then add a post back check for any code you want to ONLY run on the very
// first request to the page.
if (!IsPostBack)
{
// Code you only want to run the first time. Usually setup code to initalize
// DropDownLists, Grids or pre populate a form, etc...
}
}
你LinkButton
代碼應該都在它自己的點擊處理程序:
protected void yourLinkButton_Click(object sender, EventArgs e)
{
// code you want to execute when your button is clicked. This will run AFTER
// the Page_Load has finished.
}
現在,如果你LinkButton
在GridView
,Repeater
或某些類型的控制使用的需要結合要填寫它,那麼您可能需要實現一個RowCommand
事件處理函數來確定哪個LinkButton
被按下。您還可以將數據綁定到它的CommandArgument
屬性,以將一些唯一的行特定數據傳遞給偶數處理程序。
如果你有一堆LinkButton
都使用完全相同的處理程序,最壞的情況是投下sender
,然後比較ID
值。
protected void yourLinkButton_Click(object sender, EventArgs e)
{
LinkButton btn = (LinkButton)(sender);
if (btn.ID.Equals("Some control name you want to compare"))
{
// do something
}
}
如果我在你的問題上的標記,只是留下評論,我會嘗試和整理出來。
編輯:基於您的評論聽起來好像你必須知道它是在Page_Load
由於一些其他方面的限制,其Button
。那麼在Page_Load
沒有乾淨的方式,但它可以完成。您需要檢查密鑰Request.Form
並檢查特定的按鈕名稱(只有被點擊的Button
應包含在密鑰中)。例如:
if (Request.Form.AllKeys.Contains("yourButton1"))
{
// then do something based on yourButton1
}
else if (Request.Form.AllKeys.Contains("yourButton2"))
{
// then do something based on yourButton2
}
// etc...
我不認爲這是任何其他乾淨的方式來解決它。如果該框架包含導致在sender
屬性之一中回發的控件,那本來就不錯。
另一個編輯:這完全滑了我的腦海。上面的編輯是你需要爲Button
做的,因爲它沒有填充__EVENTTARGET
。由於您使用的是LinkButton
您可以使用以下方法來得到什麼控制引起後背部:
string controlNameThatCausedPostBack = Request.Form["__EVENTTARGET"];
我有一個LinkButton
測試這和它的工作如預期。
。希望最終解決您的問題:)
感謝Kelsey的詳細回答。我會以相同的方式實現..問題是在我的頁面我正在頁面加載和檢查一些隱藏字段值分頁......我知道它非常糟糕的設計,但它已經實施,所以不能改變它 – batwadi 2010-08-24 17:53:38
@ prakash我已經更新了我的答案,希望包含一些應該讓你啓動並運行的代碼。讓我知道你是否需要更多的幫助。 – Kelsey 2010-08-24 18:24:22
感謝您給予您Kelsey的時間,但問題是LinkButton不會出現在請求參數中,因爲我的知識只有按鈕id進入請求參數。請諮詢 – batwadi 2010-08-26 14:32:11
獨立處理方法是去這裏的方式,但你可以給每個按鈕的唯一ItemCommand
財產,過濾那些是必要的。
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack && Request.Form["__EVENTTARGET"] == LinkButton1.UniqueID)
{
// LinkButton1 was clicked
}
}
- 1. 如何知道ListView中的哪個LinkButton被點擊
- 2. LinkButton不會在點擊()上調用
- 3. LinkButton點擊OnPreRender
- 4. ASP.NET MVC中的LinkButton
- 5. ASP.NET LinkButton在iPad中不起作用
- 6. ASP.NET LinkButton - 如何隱藏javascript_doPostBack?
- 7. 如何將CSS應用於asp.net LinkButton?
- 8. 如何使用ASP.Net C#中的ModalPopupExtender在GridView中連接LinkButton?
- 9. 的OnClientClick確實在asp.net的LinkButton
- 10. 隱藏的LinkButton在asp.net GridView控件
- 11. 在DataList中隱藏LinkButton
- 12. ASP.Net LinkButton單擊事件給出錯誤
- 13. 如何使用LinkButton在ASP.NET中關閉窗體?
- 14. 在IE9中點擊一個帶有JavaScript的LinkButton
- 15. 如何找到在JavaScript的LinkButton ID,
- 16. jQuery在LinkButton上調用__doPostBack
- 17. LinkButton上的動態文本框單擊
- 18. 如何在點擊LinkButton時更新PlaceHolder
- 19. 如何在10秒後啓用LinkButton Asp.net?
- 20. 的LinkButton在ListView與CommandArgument
- 21. 的LinkButton在DataList控件
- 22. Gridview和LinkButton
- 23. C#目標=「_空白」在一個LinkButton
- 24. 如何在LinkButton點擊事件上啓動電子郵件客戶端?
- 25. 通過一個LinkButton
- 26. 如何顯示上LinkButton的圖像看起來在asp.net吸引力
- 27. 如何更改C#中的LinkButton forecolor?
- 28. 我如何排序在一個ListView關於一個LinkButton
- 29. LinkButton的點擊不更新面板
- 30. 我想禁用雙擊我的LinkButton
爲什麼它必須在page_load?爲什麼不爲每個鏈接按鈕設置不同的事件處理程序,並在該功能中進行處理? – Tommy 2010-08-23 20:23:24
頁面加載執行與鏈接無關, – batwadi 2010-08-23 20:48:44
對不起,但您的需求聽起來像是一個不良設計的解決方法。我會建議你閱讀關於asp.net的概念。凱爾西的答案是一個好的開始。 – Scordo 2010-08-23 21:25:49