2011-03-29 5 views
1

간단한 것이어야하지만 문제를 해결하는 데 어려움이 있습니다.다른 탭의 다른 페이지에서 다른 탭을 활성화하고 포스트 백을 수행하는 방법

WebTab 컨트롤 (Infragistics,하지만 정말로 중요하지 않음)을 제어하는 ​​Page (Default.aspx)가 있습니다. WebTab의 각 탭 컨트롤은 다른 페이지, Page1.aspx라는, Page2.apx을 것입니다 내부는 다음과 같이 그래서 :

Default.aspx 
WebTab 
    WebTabControl(0) 
     Page1.aspx <-- I'm in this codebehind after 
        calling __doPostBack from JavaScript 
        as I have a parameter from a WebDataGrid. 
    WebTabControl(1) 
     Page2.aspx <-- I want to open this page and pass it a parameter. 

나는 내가 필요로하는 매개 변수를 가지고 다시 게시하고 Page1.aspx 라의 코드 숨김에있어 다음 페이지로 넘어가려면 두 번째 탭 안에있는 Page2.apx를 열고 싶습니다.

기본적으로 다음 단계를 수행해야한다고 생각합니다. 1. 활성 탭을 WebTabControl (1)로 설정하십시오. 2. 내가 수행 할 수있는 매개 변수를 지정하십시오.

나는 누군가가 그것을 어떻게하는지 알려주면 자신을 쏘야 만한다는 것을 알고있다 :-) 고마워!

+0

나는 아직도 내가 다른 각도에서 찾고 있어요이를 생각하지 않았습니다. Page1.aspx에서 사용자 지정 이벤트를 구독 할 Default.aspx 페이지에서 Listener를 만들 수 있습니까? .. 아니면 그냥 나쁜 디자인인가? Page1과 Page2를 Controls로 바꾼다면 필요한 것을 할 수 있습니다. 현재 설정으로 가능한지 알기 원하면 다시 코딩 할 필요가 없습니다. –

답변

0

응답 주셔서 대단히 감사합니다 아래의 논리를 사용하지만, 그게 내가 찾던 아니다.

실제로이 문제를 해결하기 위해 수행 한 작업은 Page.aspx에서 호출 할 수있는 Default.aspx 페이지에서 JavaScript 함수를 만드는 것이 었습니다.

이것은 Default.aspx 페이지의 함수로 필요한 Tab을 활성화하고 Page1.aspx의 WebDataGrid에서 필요한 값으로 검색 상자를 채 웁니다.

<script type="text/javascript"> 
    function activateTab(rowId, tabId) { 
     var tab = $find("WebTab1"); 
     var ctl; 
     if (tabId == 3) { 
      ctl = window.frames.document.frames[tabId].window.document.getElementById("WebDialogWindow2_tmpl_txtAddressNumber"); 
     } 
     else if (tabId == 2) 
      ctl = window.frames.document.frames[tabId].window.document.getElementById("WebDialogWindow2_tmpl_txtAccount"); 

     if (ctl != null) {    
      ctl.value = rowId; 
      tab.set_selectedIndex(tabId, true, null); 
      window.frames.document.frames[tabId].window.DoSearch(rowId); 
     } 
    } 
</script> 

내가 다음 WebDataGrid의 DoubleClick 이벤트에서 호출 다음 함수와 Page1.aspx라는에서 activateTab() 함수를 호출 할 수 있었다 (내가 선택한 행에서 값을 잡기 위해 필요 .) 다음 단계는 첫 번째 코드 예에 나타낸 바와 같이 activateTab Default.aspx를 ON() 함수에서 Page2.aspx에서이 자바 스크립트 함수를 호출

 function doubleClickRow() { 
     var grid = $find("WebDataGrid1"); 
     //Get the ADDRESS_NUMBER value. 
     var rowId = grid.get_behaviors().get_selection().get_selectedRows().getItem(0).get_cell(2).get_value(); 
     window.parent.activateTab(rowId, 3); 
    } 

이었다.

 //Force a Postback 
    function DoSearch(id) { 
     HideSearch(); 
     __doPostBack("WebDataGrid1", id); 
    } 

실제로이 작업은 필자가 필요로하는 포스트 백을 수행하여 수행해야하는 작업입니다. 이러한 2 __doPostBack() 값을 Page2.aspx Page_Load 이벤트로 전달하려면 다음을 수행해야합니다. 그러나 제 경우에는 검색 상자에 이미 채워져 있기 때문에 포스트가 필요했습니다.당신이 그렇지 않으면 당신은 내가 여기에받지 않습니다 자신의 매개 변수를 코딩해야하는 스크립트 관리자를 사용하는 경우 __EVENT의 * 코드 마지막 부분을 이해하지 못하는 사람들을 위해

  //Don't need these right now, but just in case we might I'll leave them in. 
     string eventTarget = Page.Request.Params.Get("__EVENTTARGET"); 
     string eventArgument = Page.Request.Params.Get("__EVENTARGUMENT"); 
     Search(); 

, 그것은 가능합니다.

그게 전부입니다. 나는 여기서 JavaScript를 배웠다. 그래서 다른 누군가에게 도움이되기를 바란다.

감사 데이브

0

Ok AFAICU, WebTab 컨트롤에는 WebTab이 있고 각 Webtab에는 페이지가 있습니다. 이것을 시도하십시오 :

  1. 컨트롤의 자동 다시 게시 기능을 추가하십시오. 그래서 다음 탭을 호출하면 자동으로 aspx 페이지가로드됩니다.
  2. 포스트 백이 필요하지 않은 경우 탭 컨트롤의 클릭 이벤트 또는 탭 변경 이벤트에서 쿼리 문자열에 일부 매개 변수를 추가하십시오. page.aspx? tab = 1과 유사합니다. 이제 페이지로드 이벤트,

     1. Check if Request[tab] is not null. 
         2. use int.tryparse and get the tab number. 
         3. Now on the basis of the load the tab and the page. 
         And make the tab active. 
    
관련 문제