asp.net/ajax 사용자 정의 템플릿 컨트롤, 자리 표시 자와 아이템 표시/숨기기

StackOverflow https://stackoverflow.com/questions/1706705

문제

사용자 정의 템플릿 컨트롤 (툴바)이 포함되어있는 사용자 정의 USERCONTROL (버튼)이 포함되어 있습니다. 버튼은 jQuery를 사용하여 스타일을 유지하고 상태/postbacks/non = postbacks 등을 관리합니다.

버튼 중 일부는 자리 표시 자로 숨겨져 있으며 버튼 중 하나를 누를 때 표시됩니다.

jQuery와 관련된 모든 버튼은 Postback (PagerequestManager를 사용하여 UpdatePanel 내에서 Ajax 스타일)에서 시작된 것처럼 보이지만 ViewState는 자리 표시자가 보이지 않는 버튼에서 손실됩니다.

문제는 템플릿 컨트롤의 자리 표시 자의 ViewState 및 버튼에만 해당되는 것으로 보입니다. 이것은 일반적으로 비 Ajax 환경에서 작동합니다. 나는 무언가를 놓치고 있다고 생각합니다.

나를 생각하게하는 의견은 감사합니다.

코드는 다양한 부분에 위치하고 있으며 완전히 연결이 끊어지기 때문에 붙여 넣을 가치가 없을 것입니다 (이것이 도움이되지 않는다는 것을 알고 있습니다).

도움이 되었습니까?

해결책

여기에 내 질문에 대답해야한다고 생각합니다.

CSS와 함께 자리 표시 자 또는 DIV를 사용하는 대신 update 패널은 렌더링 옵션에 따라 DIV 또는 스팬으로 렌더링됩니다. 이 경우 새로운 외부 컨테이너를 숨기거나 표시하려고 시도하는 대신 업데이트 패널이 생성하는 DIV 또는 스팬을 숨기십시오.

다른 팁

내가 올바르게 기억한다면, ASP.NET 컨트롤은 가시적으로 설정된 경우 수명주기를 완료하지 않습니다. 즉, Render ()와 같은 것들이 호출되지 않으며 ViewState는 그러한 것들 중 하나 여야합니다. Ajax/JavaScript와 함께 업데이트 패널을 사용하는 것도 정말 까다로운 일이며 잘 작동하지 않습니다. 이것은 ASP.NET 제어 및 업데이트 패널 작동 방식입니다.

내 제안은 업데이트 패널을 사용하거나 JavaScript를 사용하는 것입니다.

JQuery의 $ .post/Get을 사용하여 업데이트 패널이 수행하는 작업을 쉽게 모방하고 코드 섹션을 웹 서비스 호출에서 반환 한 HTML로 교체 할 수 있습니다.

function myButtonClick(event){
    $.post("path/to/webservice", {data1: "data1"}, function(data, status){
        $("#myPanel").replaceWith(data);
    });
}

업데이트 패널을 통해 업데이트되는 코드에 JS가 첨부되어 있으면 결국 다른 문제가 발생합니다. 예 : ASP.NET AJAX 컨트롤 툴킷 컨트롤 중 하나와 같이 JS가 부착 된 항목 목록이있는 경우 업데이트 패널을 사용하여 페이지에서 이들 중 하나를 삭제했습니다. 컨트롤 업이 동기화되지 않습니다.

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