2013-12-12 1 views
1

Global.asax에 정의 된 ArrayList를 모든 세션에 표시하려고합니다. 다음은 Global.asax 및 Default.aspx의 코드입니다.global.asax 문제 - ASP.NET의 모든 새 세션에 ArrayList 부여

public class Global : System.Web.HttpApplication 
{ 

    public ArrayList userNameList = new ArrayList(); 
    protected void Application_Start(object sender, EventArgs e) 
    { 

    } 

    protected void Session_Start(object sender, EventArgs e) 
    { 

    } 
} 


public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     Global global = new Global(); 
     User user = new User(); 
     user.username = TextBox1.Text; 
     global.userNameList.Add(user); 
     if (global.userNameList.Count != 0) 
     { 
      foreach (User u in global.userNameList) 
      { 
       ListBox1.Items.Add(String.Format(u.username)); 
      } 
     } 
    } 
} 

제발, 내가 뭘 잘못하고 있는지 말해줘. 고마워요 :)

+0

안녕하세요. Krystian. 코드 샘플 감사. 보고있는 문제를 설명하면 도움이 될 수 있습니다. – Rap

답변

0

가장 먼저 잘못하고있는 것은 페이지에서 Global 클래스를 인스턴스화하는 것입니다. 그것은 예상대로 작동하지 않을 것입니다. 모든 세션 사이에 ArrayList에 (또는 다른 것)을 공유하려는 경우

, 당신은 아마 대신 응용 프로그램 상태를 사용한다 : -

http://msdn.microsoft.com/en-us/library/ms178594(v=vs.100).aspx

당신은 또한 공유 상태에 대한 액세스를 동기화에 읽어해야 당신이하는 일에 따라 잠재적 인 스레딩 문제가있을 수 있습니다.

0

당신은 Global.asax 파일에서 사용하는 것을 제거하고 aspx 페이지에이 코드를 사용

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     User user = new User(); 
     user.username = TextBox1.Text; 


     if (Cache["userList"] == null) 
      Cache["userList"] = new ArrayList(); 

     ((ArrayList)Cache["userList"]).Add(user); 

     foreach (User u in (ArrayList)Cache["userList"]) 
     { 
      ListBox1.Items.Add(String.Format(u.username)); 
     } 
    } 
} 

이 쉽게 유지 보수 문제로 실행하기 때문에 코드를 리팩토링해야합니다, 그것 플러스에서 검증 장치 아니다 모든. 도움이 되었기를 바랍니다.

레오