포스트백 완료 후 Javascript 함수 실행
-
23-12-2019 - |
문제
VB 코드를 사용하여 .NET ASP 응용 프로그램을 개발 중입니다.2개의 텍스트 상자와 1개의 버튼이 있습니다.버튼을 클릭하면 자바스크립트를 사용하여 새 창을 엽니다(새 창을 x라고 부르겠습니다).
button.OnClientClick = "ShowWindowX();return false;"
ShowWindowX() 함수는 텍스트 상자의 두 매개변수를 모두 전달하는 URL을 사용하여 새 창을 엽니다.텍스트 상자에 새 값을 삽입하고 텍스트 상자 바깥쪽을 클릭하면(단추는 아님) 텍스트 상자가 포커스를 잃을 때마다 포스트백을 수행하여 새 값을 다시 게시하도록 설정했기 때문에 페이지에서 포스트백을 수행합니다. 서버에.
문제는 3을 4로 변경하는 등 텍스트 상자 값을 편집하고 즉시 버튼을 클릭하면 먼저 텍스트 상자를 클릭하지 않고 새 값이 선택되지 않으므로 여전히 3을 얻는다는 것입니다.다음을 통해 버튼을 클릭할 때 강제로 포스트백을 시도했습니다.
btnBBHistory.OnClientClick = "__doPostBack();ShowWindowX();return false;"
이로 인해 포스트백이 발생하더라도 ShowWindowsX 기능으로 인해 열리는 창을 닫을 때까지 포스트백이 완료되지 않습니다.
새 값을 가져올 수 있도록 ShowWindowX() 함수가 실행되기 전에 강제로 포스트백을 완전히 완료하는 방법에 대해 조언할 수 있는 사람이 있습니까?
미리 감사드립니다
해결책
Ajax 호출이 아닌 한 접근 방식을 완전히 바꿔야 하며 페이지의 모든 내용이 지워지고 페이지가 새로 고쳐집니다.
그렇다면 이것을 달성하기 위해 무엇을 할 수 있습니까?다음과 같이 페이지가 포스트백 호출로 로드되는 경우 백엔드에서 체크인하고 스크립트를 추가할 수 있습니다.
if (IsPostBack)
Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowWindowX",
"ShowWindowX();", true);
물론 이미 스크립트를 등록했다면 가능합니다. ShowWindowX
그 안에 정의되어 있습니다.
그러나 포스트백이 발생할 때마다 창을 표시하지 않으려면 localStorage와 같은 전역 저장소에 플래그를 설정한 다음 창을 열려고 할 때 확인하면 됩니다.
btnBBHistory.OnClientClick = "__doPostBack();localStorage.callwin=true;return false;"
서버 측 페이지 로드에서 다음을 수행합니다.
if (IsPostBack)
Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowWindowX",
"if(Boolean(localStorage.callwin)){ShowWindowX();localStorage.callwin='';}",
true);