문제

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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top