簡體   English   中英

在page_load之前運行按鈕事件處理程序

[英]Run the button event handler before page_load

我有一個表格,其中包含我在數據庫中擁有的所有對象。 我在我的Page_Load函數中加載它們。 我有一個文本字段和一個按鈕,當單擊按鈕時,我希望該單擊的處理程序放置一個新對象,其名稱寫在數據庫的文本字段中。

現在,我希望點擊后發生的事情是頁面再次加載表中的新項目。 問題是按鈕事件處理程序在Page_Load函數之后運行。

解決方案是在Page_Load中使用IsPostBack或使用預加載功能。 一個問題是,如果我有3個不同的按鈕,我必須在它們之間有所不同,而不是有3個不同的方便功能。

任何沒有這個問題的解決方案?

碼:

protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["userId"] == null)
                Response.Redirect("Login.aspx");

            // LOAD DATA FROM DB
        }

        protected void CreateObject(object sender, EventArgs e)
        {
            // SAVE THE NEW OBJECT
        }

也許您應該嘗試在PreRender而不是Load期間加載數據

    protected void Page_Load(object sender, EventArgs e)
    {
        this.PreRender += Page_PreRender
        if (Session["userId"] == null)
            Response.Redirect("Login.aspx");
    }

    protected bool reloadNeeded {get; set;}

    protected void CreateObject(object sender, EventArgs e)
    {
        // SAVE THE NEW OBJECT
        reloadNeeded = true;
    }


    protected void Page_PreRender(object sender, EventArgs e)
    {
        if(reloadNeeded || !IsPostBack)
        // LOAD DATA FROM DB
    }

您可以檢查事件目標並執行您需要的操作:

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
         string eventTarget = Page.Request.Params["__EVENTTARGET"];
         if(whatever)
         {
             //do your logic here
         }
    }
}

在Page_Load事件中獲取控件名稱,使其返回

使用Page_PreRenderComplete事件檢索您的表。 這樣,在所有用戶事件觸發后,您的頁面將始終具有最新數據。

為什么不將click事件中的內容移動到新方法中。 然后將該方法稱為頁面加載的第一行?

一個老問題,但我在我的C#/ ASP.NET網站上遇到了與主頁/內容頁面相同的問題:點擊主頁面上的鏈接應該更改內容頁面上gridview的查詢參數。 如您所述,按鈕點擊事件 Page_Load 之后處理。 但它 Page_LoadComplete 之前處理(請參閱有關ASP.NET頁面生命周期的信息),因此您可以在那里更改頁面內容。

在我的情況下,我通過在母版頁的click事件中設置會話變量,在內容頁面的Page_LoadComplete事件中獲取此變量並基於此來執行數據綁定來解決了該問題。

母版頁:

<asp:LinkButton ID="Btn1" runat="server" OnCommand="LinkCommand" CommandArgument="1" >Action 1</asp:LinkButton>
<asp:LinkButton ID="Btn2" runat="server" OnCommand="LinkCommand" CommandArgument="2" >Action 2</asp:LinkButton>

protected void LinkCommand(object sender, CommandEventArgs e)
{
  HttpContext.Current.Session["BindInfo", e.CommandArgument.ToString());
}

內容頁:

protected void Page_LoadComplete(object sender, EventArgs e)
{
  string BindInfo = HttpContext.Current.Session["BindInfo"].ToString();
  YourBindDataFunction(BindInfo);
}

暫無
暫無

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

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