2016-06-21 1 views
0
  • 컨트롤 (예 : label)은 페이지가로드 될 때 값을 변경합니다. 페이지로드 전에
  • 는 레이블 값 때문에 이전 페이지 로드에서 값을 저장하는 간단한 방법은 무엇인가,
  • 자연스럽게 X이 시점에서 손실되는 페이지를로드 진행 "X"인가?
+0

상태 관리 - https://msdn.microsoft.com/en-us/library/75x4ha6s.aspx – riteshmeher

+0

정적 변수는 일반적으로 가장 간단한 방법입니다. 그런 다음 변수가 테스트 방법과 동일하게 유지되었는지 확인하십시오. – Adam

+4

@Adam 웹 페이지의 정적 변수가 페이지의 모든보기 사이에 공유 됨 _ – stuartd

답변

-1

나는 이것이 당신이 어떤 코드 샘플없이 무슨 뜻입니다 있는지 확실하지 않습니다하지만 난 ASP.NET에서 당신과 같이 이전 페이지 속성에 액세스 할 수있는 메모리에서 알고

Page lastPage = currentPage.PreviousPage 

가 반환 전체 Page 객체. 라벨을 가정하는 것은과 같이 정의된다 : 다음은 또한 페이지에 걸쳐 지속됩니다, 그래서 lastPageVal 정적 변수가 있는지 확인

Label myLabel = lastPage.FindControl("myLabel") as Label; 
lastPageVal = myLabel.Text 

:

<asp:label id="myLabel" runat="server" /> 

는 그런 다음에 텍스트 속성에 액세스 할 수 있습니다.

0

페이지의 이전 상태에 대한 내역 또는 적어도 이전 값 하나만 들리는 것처럼 들립니다. 나는 이것을 할 수있는 방법을 제안 할 수 있지만,주의해야한다. 그것을 과용하지 말라. ViewState의 게시물간에 데이터를 유지할 수 있지만 해당 데이터는 페이지 자체에 기록됩니다. 사용자가 양식을 게시하면 해당 데이터를 다시 게시합니다. (끝에서 더보기)

다음은 간단한 예입니다. 뒤에 코드에서 다음

[Serializable] 
public class PageState 
{ 
    public string MyLabelPreviousText {get;set;} 
} 

: 먼저, 저장할 추가 상태를 모두 포함 몇 가지 클래스를 정의

public partial class MainPage : System.Web.UI.Page 
{ 
    private PageState _pageState; 

    protected void Page_Load(object source, EventArgs e) 
    { 
     _pageState = ViewState["pageState"] as PageState ?? new PageState(); 
     _pageState.MyLabelPreviousText = MyLabel.Text; 
    } 

    protected void Page_PreRender(object sender, EventArgs e) 
    { 
     ViewState["pageState"] = _pageState; 
    } 

페이지를로드 할 때, 당신이 있는지 확인하고 PageState라고하는 클래스를 이미 ViewState에 저장했습니다. 그렇지 않은 경우 새 것을 만듭니다.

PreRender 이벤트에서 페이지 업데이트가 완료되면 라벨 텍스트로 클래스를 업데이트 한 다음 전체 내용을 ViewState에 다시 저장합니다. 그러면 다음에 페이지를로드 할 때 다시 검색 할 수 있습니다.

레이블의 이전 텍스트를 저장할 지점이 확실하지 않습니다. 이 예제에서는 Load 이벤트 중에 텍스트를 저장합니다. 그런 식으로 어느 시점에서 텍스트가 변경되면 저장 한 값이 레이블의 원래 텍스트가됩니다. 세부 사항은 수행하려는 작업에 따라 다를 수 있지만이 패턴을 사용하면 Session을 사용하지 않고 해당 종류의 사용자 정의 데이터를 저장하고 이와 같은 데이터를 메모리에 쌓을 수 있습니다.

나는 그것을 과용하지 않는다고 언급했다. 일부 레이블, 컨트롤 및 기타 데이터를 저장하면 ViewState이 너무 커지지 않습니다. ASP.NET은 이미 모든 서버 컨트롤의 상태를 유지합니다. 그러나 당신이 그걸로 정말 미친다면 ViewState 거대한 얻을 수 있습니다. 해당 데이터는 모두 페이지에 기록되며 모든 포스트 백마다 서버에 다시 게시됩니다.

큰 관심사는 아니지만 염두에 두어야합니다.Chrome 개발 도구, Fiddler를 사용하거나 페이지 소스를 검사하여 데이터가 너무 커져 성능에 영향을 줄 수 있는지 확인하십시오. 익숙하지 않은 사람들을위한

ViewState는 HTML 소스에 다음과 같습니다

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" 
    value="/wEPDwULLTEyMzgxNzgyNDIPZBYCZg9kFgICAQ9kFggCAQ9kFgJmD2QWAgIBD2QWAmYPZBYMA 
... etc. 

당신이 볼 수 있듯이, 실제로 숨겨진 양식 입력합니다. ASP.NET은 페이지 컨트롤의 모든 세부 정보를 폼에 배치하여 폼을 게시 할 때 모든 컨트롤을 함께 만들고 포스트 백 이후에 페이지가 동일하게 보이도록합니다. 이것이 우리가 처음으로 많은 컨트롤을 설정할 때 if(!IsPostBack())을 체크하는 이유입니다. 포스트 백이면 드롭 다운 등을 다시 채울 필요가 없습니다. 데이터는 ViewState 데이터에서 복원됩니다.

이 접근법은 기능적으로 한 주석에 제안 된대로 추가 숨겨진 입력을 추가하는 것과 같습니다. 차이점은 기존의 숨겨진 입력 (viewstate)을 사용하고 있고 여러 값을 저장해야하는 경우 더 많은 숨겨진 입력을 추가하는 대신 클래스의 속성으로 만 사용한다는 것입니다.

+0

Scott 자세한 답변을 주셔서 감사합니다. 그래도 나는 두 가지 의문을 품었다. 필자가 나중에 사용할 값을 저장하고 싶은 경우, Page_Init에 의해 호출 된 다른 Method에 의해 호출 된 Button_Click 메서드에 있습니다. 따라서 모든 처리가 완료된 후 Button_Click 메서드의 끝에서 Page_Load에 대한 코드를 추가합니다. 동일한 메소드의 시작 부분에서 이전 값을 검색하려고합니다. 그렇다면 Button_Click의 시작 부분에서'ViewState [ "pageState"] = _pageState;를 움직이고 실제로 필요한 정보를 어디에서 읽을 수 있습니까? _pageState에서 읽을 수 없습니까? –

+0

또한 _pageState를 사용하는 이유는 무엇입니까? 내가 다음 값으로 덮어 쓰기 전에 ViewState 단독으로 작업하고 ViewState에서 읽을 수 없습니까? –