2009-08-21 2 views

답변

15

ASP.NET은 상태 비 저장이므로 상태를 포스트 백에서 포스트 백으로 유지하지 않습니다. 사용자를 viewstate, 세션 또는 응용 프로그램에 저장하여 포스트 백 포스트 백에서 볼 수 있습니다.

#region UserName 
public string UserName 
{ 
    get 
    { 
     if (this.ViewState["UserName"] == null) 
      return string.Empty; 

     return (string)this.ViewState["UserName"]; 
    } 
    set { this.ViewState["UserName"] = value; } 
} 
#endregion 
+0

하지만 그는 모든 페이지로드시'username = (string) Request.QueryString [ "username"];'을 수행하고 있습니다. – Kobi

+0

@David Basarab, 솔루션을 요청하지 않습니다. 나는 효과의 차이를 알기 위해 노력하고있다. 이 경우 개인 대 보호. – anonymous

5

당신도 버튼 클릭 이벤트와 같은 "간단한"것들에 대한 어떤 포스트 백을 할 때마다, 당신은 페이지 클래스의 새로운 인스턴스으로 노력하고 있습니다. That 's ASP.Net 101.

+0

새 페이지로 리디렉션하거나 새 쿼리 문자열로 페이지를로드하면 다시 게시되지 않습니다. 쿼리 문자열을 사용하여 페이지에서 버튼 클릭 이벤트를 처리하는 경우 이는 포스트 백이되고 쿼리 문자열은 포스트 백 http 요청과 함께 전송됩니다. 어쨌든, 그것은 여전히 ​​페이지 클래스의 새로운 인스턴스입니다. –

+0

보호 대 개인에 관한 내 대답을 찾지 못했습니다. – anonymous

1

사용자 이름 필드를 private 또는 protected로 선언하면이 상황이 발생하지 않습니다. protected/private만이 클래스 외부의 변수 또는 상속 된 멤버에 대한 액세스 가능성입니다.

저는 이것이 수명주기 문제 일 가능성이 높다고 생각합니다.

처음으로이 페이지를 탐색 할 때 쿼리 문자열이 요청에 대해 설정된 경우 사용자 이름은 값만 갖습니다. 따라서 "/TeacherControlPanel.aspx"에는 값이없는 사용자 이름이 있지만 "/TeacherControlPanel.aspx?username=SomeUserName"이됩니다. 이러한 경우 필드 username은 값이 설정되어있는 경우에만 값을 가지게됩니다. 그리고 쿼리 문자열이 설정되지 않은 경우 페이지에서 버튼 클릭 이벤트를 처리하면로드가 실행되고 쿼리 문자열이 설정되지 않으면 사용자 이름이 null이됩니다. 따라서 click 이벤트에 리디렉션 문자열에 추가 할 내용이 없습니다.

귀하의 응용 프로그램에서 TeacherControlPanel.aspx를 사용하려면 어떤 탐색 경로를 사용하고 있습니까?

+2

또한 보호 된 필드는 개인 필드가 아닌 반면 페이지 (TeacherControlPanel.aspx, <% %> 문)에 표시됩니다. – Kobi

관련 문제