문제

ASP.NET AJAX 페이지에서 상태를 유지하는 데 문제가 있습니다.짧은 버전:비동기 콜백이 이루어진 후 페이지 ViewState를 업데이트하여 비동기 호출 중에 서버가 변경한 모든 상태를 반영할 수 있는 방법이 필요합니다.

이는 일반적인 문제인 것 같지만 설명을 돕기 위해 내 시나리오를 설명하겠습니다.

몇 가지 JavaScript 개선 사항, 즉 열과 행을 끌어서 놓을 수 있는 기능이 포함된 그리드 모양의 컨트롤이 있습니다.열이나 행이 새 위치에 놓이면 AJAX 메서드가 호출되어 제어 서버 측에 알리고 해당 서버 측 이벤트("OnColumnMoved" 또는 "OnRowMoved")가 발생합니다.

ASP.NET AJAX 호출은 기본적으로 전체 페이지를 요청으로 보냅니다.이렇게 하면 페이지가 전체 수명 주기를 거치고, viewstate가 유지되고, 컨트롤 상태가 raiseCallbackEvent 메서드가 호출되기 전에 복원됩니다.

그러나 AJAX 호출은 페이지를 업데이트하지 않으므로 ViewState는 원래의 열이나 행이 이동된 후에도 컨트롤의 상태입니다.따라서 클라이언트 측 작업이 두 번째로 발생하면 AJAX 요청이 서버로 이동하고 페이지 및 컨트롤이 다시 구축되어 이를 반영합니다. 첫 번째 첫 번째 열이나 행이 이동된 이후의 상태가 아닌 컨트롤의 상태입니다.

이 문제는 많은 의미로 확장됩니다.예를 들어 그리드에 새 항목을 추가하는 클라이언트 측/AJAX 작업이 있는 경우 행을 드래그하면 클라이언트 측보다 항목이 하나 적은 서버 측에 그리드가 구축됩니다.

마지막으로 내 특정 예에서 가장 중요한 것은 우리가 작업 중인 실제 데이터 소스 개체가 ViewState 페이지에 저장된다는 것입니다.이는 많은 조작 후에 DB에 커밋되거나 사용자가 취소하는 경우 폐기될 수 있는 조작된 데이터의 상태 저장 복사본을 보관할 수 있도록 허용하는 설계 결정이었습니다.그것은 바꾸기가 매우 어렵습니다.

따라서 AJAX 메서드가 실행된 후 콜백 시 ViewState 페이지를 업데이트할 방법이 필요합니다.

도움이 되었습니까?

해결책

어쨌든 이미 ViewState를 섞고 있다면 UpdatePanel을 사용할 수도 있습니다.부분 포스트백 ~ 할 것이다 페이지의 ViewState를 자동으로 업데이트합니다.

다른 팁

이 블로그 게시물을 확인하세요. ICallbackEventHandler 및 Viewstate 조정.저자는 당신이 겪고 있는 바로 그 상황을 다루고 있는 것 같습니다.

따라서 ICallbackEventHandler를 사용할 때 콜백에 대한 상태 관리를 업데이트하려면 극복해야 할 두 가지 장애물이 있습니다.첫 번째는 읽기 전용 viewstate의 문제입니다.다른 하나는 콜백을 트리거하기 전에 사용자가 페이지에 적용한 변경 사항을 실제로 등록하는 것입니다.

이 문제를 해결하는 방법에 대한 제안은 블로그 게시물을 참조하세요.이것도 확인해 보세요 포럼 게시물 같은 문제도 논의합니다.

실제로 귀하가 제공한 두 링크를 모두 찾았지만 언급한 대로 문제를 해결하는 것이 아니라 단순히 문제를 설명하는 것뿐입니다.블로그 게시물의 작성자는 다른 ViewState 공급자를 사용하여 해결 방법을 제안했지만 안타깝게도 이 경우에는 불가능합니다... ViewState의 세부 사항은 그대로 두고 수행 중인 작업에 연결해야 합니다. 상자 밖으로.

나는 상당히 우아한 해결책을 찾았습니다. Telerik의 RadAjaxManager.매우 훌륭하게 작동합니다. 기본적으로 포스트백을 호출할 수 있는 각 컨트롤을 등록한 다음 해당 포스트백이 비동기적으로 수행된 후에 다시 그려야 하는 각 컨트롤을 등록합니다.RadAjaxManager는 비동기 포스트백 후에 DOM을 업데이트하고 ViewState 및 영향을 받는 모든 컨트롤을 다시 작성합니다.Reflector를 들여다본 후 내부는 약간 투박해 보이지만 제 목적에는 적합합니다.

기본 제공 ASP.NET AJAX UpdatePanel이 동일한 작업을 수행하는데 왜 사용자 지정 컨트롤을 사용하는지 이해할 수 없습니다.

복잡성이 더해지고, 지원이 줄어들며, 다른 사람이 귀하의 앱에서 작업하기가 더 어려워집니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top