2010-11-29 3 views
1

업데이트 패널의 링크 버튼에서 전체 페이지 다시 게시를 조건부로 트리거하려면 어떻게합니까?업데이트 패널의 링크 버튼에서 조건부로 전체 페이지 다시 게시 트리거

내부에 링크 단추가 포함 된 자체 updatepanel이 포함 된 사용자 지정 컨트롤이 있습니다. 링크 버튼을 누르면 이벤트 핸들러가 정상적으로 컨트롤을 업데이트하거나 페이지에서 전체 포스트 백을 수행하도록 선택할 수 있습니다.

Page 
    Custom Control 
    UpdatePanel 
     LinkButton 

이벤트 핸들러 의사 코드 : 여기

은 컨트롤 계층 구조입니다

LinkButton Click Handler Begin 
    If is a partial post back AND a full postback is needed 
     Page.DoFullPostback 
    End If 
End Handler 

참고 : 내가가는 요리가 일어날 수있는 부분 다시 게시가 필요합니다. 컨트롤 마크 업에 __DoPostback을 주입하는 것을 고려하고 있었지만 이것은 나에게 해커처럼 보입니다.

도움 주셔서 감사합니다.

답변

4

죄송합니다, 나는 VB에 익숙하지 않다 :

protected void btnLink_Click(object sender, EventArgs e) 
{ 
    bool isAsync = ScriptManager.GetCurrent(Page).IsInAsyncPostBack; 
    bool postBackIsNeeded = true; 

    if (isAsync && postBackIsNeeded) 
    { 
     ScriptManager.GetCurrent(Page).RegisterPostBackControl(btnClick); 
     string postback = Page.ClientScript.GetPostBackEventReference(
      btnClick, 
      string.Empty 
     ); 
     ScriptManager.RegisterStartupScript(
      btnClick, 
      btnClick.GetType(), 
      "postback", 
      postback, 
      true 
     ); 
} 

} 주요 아이디어는 당신의 LinkButton의 게시의 유형을 변경하는 것입니다

제어. 필요한 경우 비동기 포스트 백 이벤트 중에 부분 대신 전체 포스트 백으로 변경해야합니다. 이 직후에 다른 다시 게시 스크립트를 생성해야하며 페이지가 클라이언트에 반환되는 즉시 실행해야합니다.

마지막으로 루프 감지 조건 (내 경우에는 if (isAsync && postBackIsNeeded))을 사용하십시오. 그렇지 않으면 다시 게시가 무한 할 것입니다.

+0

내가 가진 문제 때문에이 기능이 필요했습니다. ViewState 개체를 기반으로 Page_Load에서 컨트롤을 동적으로 생성하고 있습니다. 그러나 viewstate 개체는 단추 클릭 이벤트 처리기에서 업데이트되거나 수정됩니다. 페이지 수명주기에 따라 button_click 이벤트 핸들러는 button_click 포스트 백 이후에 실행되므로 내 viewstate는 기본적으로 page_load가 사용 된 후에 업데이트됩니다. button_click에서이 코드를 사용하여 page_load가 다시 실행되도록하는 또 다른 포스트 백이 발생했습니다. 또한 if 문 내 viewstate 수정 코드를 넣습니다. 공유 해줘서 고마워! – Mausimo

+0

비동기 포스트 백 내부에서 전체 페이지를 다시 게시하지 않고 렌더링하는 방법이 없습니까? 이것은 많은 사람들에게 불필요하게 발생하는 것으로 보이므로 행동을 동적으로 트리거 할 수있는 방법이 있기를 바랍니다. – Oliver

1

가장 쉬운 방법은 페이지의 어딘가에서 UpdatePanels 외부에 숨겨진 버튼을 만드는 것입니다. 전체 포스트 백이 필요할 경우 JavaScript를 사용하여 버튼을 클릭하거나 __doPostback()을 실행하십시오. UpdatePanel 자체에서 __doPostback()을 호출하거나 JavaScript 내부의 버튼으로 프로그래밍 방식으로 JavaScript에서 부분 우편함을 구현할 수 있습니다. 내 예제 소스는 C#으로 작성 될 수 있도록

관련 문제