실제 프로젝트에서 문제가 발생했습니다. 먼저 새 창에 TreeView 컨트롤이 배치되었습니다. TreeView 컨트롤의 데이터 바인딩은 이전 에세이(TreeView 바인딩 XML 데이터 소스 C# 코드 예제)에 있었습니다. 앞서 언급했듯이 이제 해결해야 할 것은 TreeView에서 노드를 클릭하고 텍스트와 값을 상위 페이지로 반환하고 새 창을 닫는 방법입니다.
먼저 TreeView의 클라이언트 이벤트를 지원하기 위해 백그라운드 코드에 onclick 속성을 추가합니다.
if (!IsPostBack)
{
TreeView1.Attributes.Add("onclick", "ReturnValue()");/ /ReturnValue는 자바스크립트 함수입니다
BindTreeView();
}
이제 js를 통해 TreeView에서 선택한 노드를 가져오는 방법을 해결해야 합니다.
function ReturnValue() {
var objNode = event.srcElement;
var unitid = event.srcElement .href;
if (objNode.tagName != "SPAN") {
return;
}
window.opener.document.getElementById ("txtUnit").value = objNode.getAttribute(" innerHtml");
window.opener.document.getElementById("txtUnitID").value = unitid
window.close();
실제로 여기서 사용됨 약간의 트릭입니다. 어떤 속성에서 TreeView에 바인딩된 ValueField의 값을 얻을 수 있는지 모르기 때문에 Value 값을 NavigateUrl에 연결했습니다. 그래서 코드의 노란색 부분을 작성했습니다.
빨간색 부분 이 코드는 TreeView에 표시되는 텍스트를 가져오는 데 사용됩니다. 소스 파일을 확인하면 TreeView의 Text 속성 값이 SPAN에 배치되어 있다는 것을 알 수 있기 때문입니다.
코드의 녹색 부분은 상위 페이지를 채우는 데 사용되지만 "txtUnit"은 클라이언트측 컨트롤이어야 합니다. 서버측 컨트롤인 경우 팝업 창이 컴파일할 때 컨트롤이 존재하지 않는다고 보고합니다.
이렇게 하면 나에게 꼭 필요한 기능이 구현됩니다! 또한 상위 페이지에서 백필 값을 로드하는 데 사용되는 클라이언트 컨트롤이 서버 이벤트에 사용되면 어떻게 해야 하는지 말하는 사람도 있을 수 있습니다. C# 코드는 다음과 같습니다.
Request.Form["txtUnit"].ToString()
여기서 "txtUnit"은 컨트롤 ID가 아니라 이름 속성입니다. !