2015-02-05 61 views
0

我在網頁上工作, 我需要它,當它加載第一次它會從API的數據。ASP .net PostBack和功能

然後,我想用不同的頁面和相同的數據。

我用的IsPostBack

Page_Load(object sender, EventArgs e) 
{ 
     if (!Page.IsPostBack) 
     { 
      //First Time Load Data 
      leadsList = new List<Lead>(); 
      var client = TVPLeads.Session.GetWebClient(Session); 
      string PostId = PostId = Request.QueryString["postId"]; 
      PostId = "1"; 
      try 
      { 
       leadsList = API.GetPostLeads(client, PostId); 
      } 
      catch (Exception) { } 
      page = (page == 0) ? 0 : page - 1; 
      DisplayLeadsPage(leadsList, page, ""); 

     } 

} 

private void pageChoosen(object sender, EventArgs e) 
{ 
    int page = int.Parse(((Button)sender).CommandArgument); 
    DisplayLeadsPage(leadsList, page-1, ""); 
} 

DisplayPagination(){ 
. 
. 
Button prev = new Button{ 
        ID = "page_"+i, 
        CssClass = "Pagination", 
        Text = "i", 
        CommandArgument = ""+i, 
        OnClientClick = "pageChoosen" 
       }; 
       prev.Click += pageChoosen; 

       divPagination.Controls.Add(prev); 
. 
. 
. 
} 

我點擊一個按鈕,得到了Page_Load中按預期的回發是真實的,但功能不點火器(與調試檢查)。

  • 如果我刪除了IsPostBack並且它會重新生成一遍,那麼按鈕函數會觸發。

這是什麼問題?如何正確使用它?

+2

我不明白這個問題。按照預期,您聲明'IsPostBack'是'true'。如果'IsPostBack'爲'false',你的條件就說只運行代碼。 – 2015-02-05 21:37:08

+0

是的,但按鈕被點擊,它確實去了它的功能。如果我刪除if(postBack)它正在工作。 – 2015-02-05 21:38:45

回答

1

第一次請求你的頁面時,你的頁面不會被回發。 asp.net的渲染引擎創建頁面並將其發送回客戶端。

當你點擊一個按鈕然後這個點擊我們觸發一個回傳和一個定義的處理程序,Page類將執行一些代碼。然後頁面將被構建,當Page_Load出現時,將不會執行if(!Page.IsPostBack)中的代碼,因爲Page類的IsPostBack屬性爲true

這裏有兩個關鍵概念。第一個是關於Page生命週期,即頁面在每個請求中所經歷的事件。

第二個是Page只在客戶端第一次請求它時(或者她完全刷新頁面的時間,例如在Chrome中點擊F5)才被回發。

更新

響應按鈕點擊

如果您還沒有定義的服務器端的按鈕,你應該定義一個。怎麼樣?

在你的標記,只需添加以下代碼行:

<asp:Button id="buttonId" Text="Submit" runat="server" /> 

然後在按鈕上的設計師雙擊。你會注意到,你將被導航到類後面的代碼,並且會創建一個方法,這將是點擊處理程序。然後在這個方法的內部,當用戶點擊你的按鈕時,你可以編寫應該​​執行的命令。如果你現在回到你的標記,你會注意到另一個屬性將被添加到按鈕名稱OnClick

更新

動態生成的按鈕需要當頁面發佈回再次創建。否則,他們將無法工作。

+0

好的,那是我想要的,但是如何讓它執行我的功能 – 2015-02-05 21:51:44

+0

@IgorGumush這取決於你想執行它的時間。它應該在頁面首次加載時執行嗎?或者在響應點擊按鈕? – mason 2015-02-05 21:58:03

+0

響應按鈕點擊 – 2015-02-05 21:59:46

1

嘗試向控件添加事件處理程序。

你的控制會是這個樣子(aspx頁面上):

<asp:button id="YourButton" runat="server" OnClick="YourButton_Click" /> 

然後你的後臺處理程序也應該是公開的:

public void YourButton_Click(object sender, System.EventArgs e) { 

編輯:您也可以這樣做:

leadsList = new List<Lead>(); 

if (!Page.IsPostBack) 
{ 
    ... 
} 
else 
{ 
    page = (page == 0) ? 0 : page - 1; 
    DisplayLeadsPage(leadsList, page, ""); 
} 
+0

我做到了,它的工作時,我不使用isPostBack – 2015-02-05 21:53:15

+0

@IgorGumush請編輯您的問題,以便顯示(請清楚哪個是您的更新代碼) – mason 2015-02-05 21:54:51

+0

@IgorGumush請參閱我的編輯。 – jrjensen 2015-02-05 22:00:59

0

找到了問題的答案。

當頁面回發到服務器。 我需要重建控件否則,這些控件將爲空。