簡體   English   中英

如果要處理按鈕點擊事件,則在Page.Load期間識別

[英]Identify during Page.Load if Button click event is going to be handled

我有ASPX網頁,上面有一個按鈕。 用戶單擊此按鈕后,將請求提交給服務器並執行按鈕單擊事件處理程序。

我有一些邏輯必須駐留在Page.Load上,但是這個邏輯取決於是否通過按鈕點擊提交了請求。 基於頁面生命周期事件處理程序在頁面加載后執行。

問題 :如何在頁面加載中找出頁面加載后要執行的事件處理程序?

@ akton的答案可能就是你應該做的,但是如果你想要退出預訂並確定在生命周期的早期發生什么導致回發,你可以查詢回發數據以確定點擊的內容。 但是,這不會為您提供在事件處理期間將執行的實際函數/處理程序。

首先,如果Button / ImageButton以外的其他內容導致回發,則控件的ID將位於__EVENTTARGET 如果一個Button導致了回發,那么ASP.NET會有一些“可愛的”:它會忽略所有其他按鈕,這樣只有單擊的按鈕才會顯示在表單上。 ImageButton有點不同,因為它會發送坐標。 一個實用功能,你可以包括:

public static Control GetPostBackControl(Page page)
{
    Control postbackControlInstance = null;

    string postbackControlName = page.Request.Params.Get("__EVENTTARGET");
    if (postbackControlName != null && postbackControlName != string.Empty)
    {
        postbackControlInstance = page.FindControl(postbackControlName);
    }
    else
    {
        // handle the Button control postbacks
        for (int i = 0; i < page.Request.Form.Keys.Count; i++)
        {
            postbackControlInstance = page.FindControl(page.Request.Form.Keys[i]);
            if (postbackControlInstance is System.Web.UI.WebControls.Button)
            {
                return postbackControlInstance;
            }
        }
    }
    // handle the ImageButton postbacks
    if (postbackControlInstance == null)
    {
        for (int i = 0; i < page.Request.Form.Count; i++)
        {
            if ( (page.Request.Form.Keys[i].EndsWith(".x")) || (page.Request.Form.Keys[i].EndsWith(".y")))
            {
                postbackControlInstance = page.FindControl(page.Request.Form.Keys[i].Substring(0, page.Request.Form.Keys[i].Length-2) );
                return postbackControlInstance;
            }
        }
    }
    return postbackControlInstance;
}   

所有這一切,如果您可以重構您的控件/頁面以延遲執行,如果您使用@akton建議的范例,您的代碼將更清晰/更強大。

可能有更好的解決方案。 您是否希望代碼僅在首次加載頁面時運行並且您正在使用回發? 如果是這樣,請檢查Page.IsPostBack屬性。 如果代碼不需要在其他事件處理程序之前運行,則將其移動到OnPreRender,因為它在事件處理程序之后觸發。

這些對我幫助很大:我想從gridview中保存值,它正在重新加載我的gridview /覆蓋我的新值,因為我在PageLoad中有IsPostBack。

if (HttpContext.Current.Request["MYCLICKEDBUTTONID"] == null)

{ //Do not reload the gridview.

}

else { reload my gridview. }

消息來源: http//bytes.com/topic/asp-net/answers/312809-please-help-how-identify-button-clicked

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM