- 컨트롤 (예 : label)은 페이지가로드 될 때 값을 변경합니다. 페이지로드 전에
- 는 레이블 값 때문에 이전 페이지 로드에서 값을 저장하는 간단한 방법은 무엇인가,
- 자연스럽게 X이 시점에서 손실되는 페이지를로드 진행 "X"인가?
답변
나는 이것이 당신이 어떤 코드 샘플없이 무슨 뜻입니다 있는지 확실하지 않습니다하지만 난 ASP.NET에서 당신과 같이 이전 페이지 속성에 액세스 할 수있는 메모리에서 알고
Page lastPage = currentPage.PreviousPage
가 반환 전체 Page 객체. 라벨을 가정하는 것은과 같이 정의된다 : 다음은 또한 페이지에 걸쳐 지속됩니다, 그래서 lastPageVal 정적 변수가 있는지 확인
Label myLabel = lastPage.FindControl("myLabel") as Label;
lastPageVal = myLabel.Text
:
<asp:label id="myLabel" runat="server" />
는 그런 다음에 텍스트 속성에 액세스 할 수 있습니다.
페이지의 이전 상태에 대한 내역 또는 적어도 이전 값 하나만 들리는 것처럼 들립니다. 나는 이것을 할 수있는 방법을 제안 할 수 있지만,주의해야한다. 그것을 과용하지 말라. 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)을 사용하고 있고 여러 값을 저장해야하는 경우 더 많은 숨겨진 입력을 추가하는 대신 클래스의 속성으로 만 사용한다는 것입니다.
Scott 자세한 답변을 주셔서 감사합니다. 그래도 나는 두 가지 의문을 품었다. 필자가 나중에 사용할 값을 저장하고 싶은 경우, Page_Init에 의해 호출 된 다른 Method에 의해 호출 된 Button_Click 메서드에 있습니다. 따라서 모든 처리가 완료된 후 Button_Click 메서드의 끝에서 Page_Load에 대한 코드를 추가합니다. 동일한 메소드의 시작 부분에서 이전 값을 검색하려고합니다. 그렇다면 Button_Click의 시작 부분에서'ViewState [ "pageState"] = _pageState;를 움직이고 실제로 필요한 정보를 어디에서 읽을 수 있습니까? _pageState에서 읽을 수 없습니까? –
또한 _pageState를 사용하는 이유는 무엇입니까? 내가 다음 값으로 덮어 쓰기 전에 ViewState 단독으로 작업하고 ViewState에서 읽을 수 없습니까? –
- 1. 페이지의 이전 값 표시
- 2. ArrayStack - 이전 이전 값 저장
- 3. 이전 값 저장 및 새 값 확인
- 4. 이전 페이지의 값 가져 오기 Controll의
- 5. 체크 아웃 페이지의 로컬 저장 값
- 6. 현재 페이지의 이전 페이지의 ID
- 7. 편집 페이지의 목록 상자에서 "이전 값"을 선택하십시오.
- 8. PHP $ _GET 이전 페이지의 변수
- 9. 페이지의 모든 CodeMirrors 저장
- 10. 세션에 ArrayList 값 저장
- 11. UserControl에서 마스터 페이지의 값 설정
- 12. 브라우저에서 control + s (기능 저장) 무시하기
- 13. WiX에서 CheckBox의 값 저장
- 14. 사용자의 이전 검색어 저장
- 15. 목록에 이전 데이터 저장
- 16. 변수에 이전 event.target.id 저장
- 17. 다른 페이지의 범위 값
- 18. 홈 페이지의 값 검색
- 19. 다른 페이지의 범위 값
- 20. 페이지의 속성 값 얻기
- 21. 이전 이전 연도의 데이터를 Rails에 저장 하시겠습니까?
- 22. 저장 값
- 23. PageLoad() 이벤트에서 "HTML Select Control"값 할당
- 24. 값 변경 이벤트에서 이전 (이전) 값 가져 오기
- 25. 셀 값 저장
- 26. 퀴즈 : 입력 값 저장
- 27. 테이블에서 이전 값 찾기
- 28. MySQL의 이전 행 값
- 29. 이전 값 표시
- 30. TAB로 값 이전 액티비티
상태 관리 - https://msdn.microsoft.com/en-us/library/75x4ha6s.aspx – riteshmeher
정적 변수는 일반적으로 가장 간단한 방법입니다. 그런 다음 변수가 테스트 방법과 동일하게 유지되었는지 확인하십시오. – Adam
@Adam 웹 페이지의 정적 변수가 페이지의 모든보기 사이에 공유 됨 _ – stuartd