2011-12-13 1 views
0

asp.net 웹 양식 내에서 다음 코드를 사용하여 서버에서 만든 .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(); 

클라이언트에서 텍스트 상자에 값을 입력하고 단추를 클릭하면 배열에 추가/추가됩니다. 현재, 버튼을 클릭하면 (예상대로) 배열이 null로 재설정됩니다. isPostBack을 사용하지 않으면 마지막 값만 예상대로 유지됩니다. 내가 asp : 조건부 업데이 트와 Ui에 updatepanels 있고 asp.net 페이지 수명주기 여전히 초기화,로드, pre-render 및 언로드 일으키는 포스트 백 발생합니다.

asp.net은 녹슬지 만, 이와 같은 시나리오는 세션 상태를 사용하고 조작을 위해 세션에 배열을 저장하는 최선의 (유일한) 접근법입니까, 아니면 뭔가 빠져 있습니까?

또한 viewstate가 사용할 수 있습니다

답변

0

좀 더 연구 한 후에 세션 상태를 사용하기로 결정했습니다. 국가 관리를위한 여러 가지 옵션이 있지만 세션은 내가하고 싶은 일에 대해 가장 직접적이고 확장 가능했습니다.

관심있는 항목은 세션 변수로 사용되는 목록 배열을 보여주는 작업 솔루션입니다. 우리가 기여 세션 상태의

// 빠른 예 : 다음 I 설정 뒤에 코드 내 다음

<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> 

: 문서 I 설정 테스트의 기본 필드, 버튼 및 목록 상자 내에서

의 shoping 카트 예를 에 // 유사한 UI 에서 세션 객체에 // 당신은 어떤 객체를 사용하거나 빨리 나는 그냥 배열을 사용하여 입력 할 수

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();  

세션 변수로 작업 할 때 널 세션 변수 (변수가 종료되는지 확인)를 테스트하는 것도 좋은 방법 일 수 있습니다. 경우에 따라서는 세션을 작성하기 전에 추가하려고하면 null 참조 예외가 발생할 수 있습니다.

희망이 있습니다.

0

어떤 지침을 주셔서 감사합니다,하지만이 페이지 전달 속도가 느려 사용자가 얻는 다운로드에 추가 코드를 추가합니다. 또한 우리의 객체는 직렬화 가능해야한다고 생각합니다.

+0

고맙습니다 yougotiger. 네, 당신은 페이지의 직렬화와 "bloating"에 맞습니다. 그 중 하나를 골라야한다면 세션 주 경로로 갈 것입니다. – rlcrews

관련 문제