2011-12-13 48 views
0

在一個asp.net web表單中,我想將值添加回在我的代碼中在服務器上創建的.net對象類型中,我擁有以下內容:在asp.net中更新客戶端的服務器對象類型

protected void Page_Load (object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       myArrayList.Add("Value 1"); 
       myArrayList.Add("Value 2"); 
       myBox.DataSource = myArrayList; 
      } 
      myBox.DataBind(); 
      myTime.Text = DateTime.Now.ToString(); 
     } 

     protected void btnAddText_Click (object sender, EventArgs e) 
     { 
      myArrayList.Add(mytext.Text.ToString()); 
      myBox.DataSource = myArrayList; 
      myBox.DataBind(); 
     } 

     public ArrayList myArrayList = new ArrayList(); 

我想要做的是將值輸入到客戶端的文本框中,當單擊按鈕時,將它們追加到數組中。目前,(如預期)一旦按鈕被點擊,數組將被重置爲空。如果我不使用isPostBack,它只會再次按預期保留最後一個值。我有條件更新Ui中的asp:updatepanels,我意識到asp.net頁面生命週期仍然在回發(引起Init,Load,預渲染和卸載)上觸發。

我的asp.net是生鏽的,但對於像這樣的場景是最好的(唯一)方法來使用會話狀態並將數組存儲在會話中進行操作,或者我錯過了什麼?

感謝您的任何指導,

回答

0

經過一番更多的研究,我決定去使用會話狀態的路線。對於狀態管理有很多選項,但會話是我想要做的最直接和最可擴展的選項。

對於這裏感興趣的任何一個工作解決方案顯示列表數組被用作會話變量。

在文檔我的設置基本區域,按鈕,列表框來進行測試:

<table> 
      <tr> 
       <td> 
        <asp:ListBox ID="lstItems" runat="server" Width="200px" Height="120px" /> 
       </td> 
       <td valign="top"> 
        <asp:TextBox ID="myTextBox" Height="32px" runat="server" Width="200px" />&nbsp;&nbsp;<asp:Button 
         Text="Add User" Width="80px" Height="32px" ID="myButton" OnClick="AddNames" runat="server" /> 
       </td> 
      </tr> 
     </table> 

那麼後面我設置了以下代碼中:我們貢獻會話狀態的

//簡單的例子從UI //類似於SHOPING車示例 會話對象//你可以用任何物體或鍵入我只是用一個數組,因爲它是快速

protected void Page_Load (object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     //Create the session variable and base it upon the array created (this can be any type) 
     Session["myList"] = mainList; 
    } 
} 

protected void AddNames(object sender, EventArgs e) 
{ 
    //Here I set the array to = the Session. key point here is a session object must be cast to the approriate type on assignement 
    mainList = (ArrayList)Session["myList"]; 
    //add to the array 
    mainList.Add(myTextBox.Text.ToString()); 
    //bind to UI 
    lstItems.DataSource = mainList; 
    lstItems.DataBind(); 
    myTextBox.Text = string.Empty; 
} 

ArrayList mainList = new ArrayList();  

使用會話變量時,測試空會話變量(查看變量是否退出)也可能是一個好主意。在某些情況下,如果嘗試在創建之前添加到會話中,則失敗會導致引發空引用異常。

希望這會有所幫助

0

您還可以使用視圖狀態,但增加了額外的代碼來下載用戶得到這會減慢頁面交付。另外,我相信我們的對象必須是可序列化的。

+0

謝謝你,你好。是的,你在頁面的序列化和「膨脹」中是正確的。如果我必須在他們之間做出選擇,我會參加會議狀態路線。 – rlcrews