2010-06-17 2 views
3

VBappbehind가있는 ASP.Net에 webapp가 있습니다. 그 사람이 페이지에있는 동안 지속하도록 선언 한 List 변수가 필요하지만 현재 컨트롤이 코드에 다시 게시되면 모든 것이 지워집니다. 나는 완전히 ASP.net에 익숙하지 않기 때문에 이것이 가능한지 전혀 모른다. 변수가 Session 일 수 있습니까? 그것들은 기본 유형으로 제한되는 것처럼 보이지만 잘못 될 수 있습니다.VB에서 페이지 변수를 지우지 못하게하는 ASP.Net webapp을 방지하는 방법이 있습니까?

답변

2

ASP.Net을 사용하면 페이지가로드 될 때마다 코드 비하인드 클래스의 새 인스턴스가 생성되므로 클래스 수준 변수가 재설정됩니다.

가장 좋은 방법은 세션에 보유하려는 목록을 저장하는 것입니다. 일을 더 쉽게 만들려면 세션 변수에서 데이터를 읽는 목록에 대한 getter를 만들 수 있습니다. C#에서는 다음과 같이 보입니다.

private List MyList 
{ 
    get { return Session["ListKey"] as List; } 
    set { Session["ListKey"] = value; } 
} 
+0

그는 VB를 사용하고 있습니다 :) :) –

+0

그냥 목록을 선언하고 매번 세션에 저장하겠습니까? Session ("ListOfStuff") = codeBehindList'? –

+0

@Francisco : 감사합니다.하지만 C#에서 VB로 변환 할 수 있습니다. :) –

3

ASP.NET ViewState을 살펴보십시오. 당신은 또한 페이지 크기 팽창과 성능 문제를 포함하여 그것을 사용한다면 많은 어려움이 있음을 알아야합니다. C# 코드는 (. SRY 나는 VB 잘 모르겠어요) 다음과 같습니다

List<int> MyList 
{ 
    get { return (List<int>) ViewState["mylist"]; } 
    set { ViewState["mylist"] = value; } 
} 

참고 :이 변수를 초기화하는 것을 잊지 마십시오.

세션 상태 사용에 대한 참고 사항 : 사용자가 두 개 이상의 창을 동시에 열어두면이 기능이 작동하지 않습니다.

+0

ㅎ, viewstate를 잊어 버렸습니다 ...얼마나 내가 그것을 좋아하는지에 관해 간다 :). 아마 더 좋은 선택입니다. – ckramer

+0

나는 꽤 새로운 소리가 난다고 생각하지만, 나는 이것에있어, 그래서 괜찮아. viewstate가 페이지 속도를 늦추는 이유는 무엇입니까? –

+0

@Chapso - 끔찍한 선택이 아닙니다. 예를 들어, int에 작은 숫자의 List를 저장한다면, 아마도 OK 일 것입니다. 수천 개의 int를 저장하는 경우 다른 곳을보고 싶을 수 있습니다. – Keltex

1

다중 페이지 웹 응용 프로그램이 있다고 가정하면 특정 페이지에만 필요하고 다른 페이지에서는 필요하지 않은 변수를 저장하려는 경우 페이지 ViewState을 사용하여 요청에서 유지하려는 변수를 저장할 수 있습니다 요청하십시오.

변수가 다른 페이지에서 유지되어야하는 경우 Session을 사용하여 저장할 수 있습니다.

이제 ViewState를 사용할 때 큰 개체를 페이지에 저장하거나 페이지에 많은 컨트롤이있는 경우 큰 문자열 (인코딩 된 viewstate)이 포스트 백간에 오가며로드가 증가한다는 점을 고려해야합니다 시간과 실행 시간.

0

다음은 사용을 종료 한 코드입니다.

Private Property ChangedControls() As List(Of Control) 
    Get 
     Return DirectCast(Session("changedControls"), List(Of Control)) 
    End Get 
    Set(ByVal value As List(Of Control)) 
     Session("changedControls") = value 
    End Set 
End Property 

페이지로드시 새 목록 할당은 정상적으로 작동했습니다.

관련 문제