2013-07-31 2 views
2

저는 몇 시간 동안 내 머리를 긁적이고이 문제는 재미있을 것 같습니다. 나는 내 제어와 함께 야합니다 __doPostBack 이벤트가 누락 된 것 같지만 그렇지 않습니다. 일부는 추가 제안 :__doPostBack이 컨트롤의 일부로 포함되지 않았습니다.

ClientScript.GetPostBackEventReference(this, string.Empty); 

이 있지만, 내가 다시 게시 이벤트 페이지를 다시로드 할 내가 상관없이, 대한 찾고 있어요 함수 정의를 작성 않지만. 일부는에서 언급했듯이 :

__doPostBack is not defined

컨트롤 ID를 찾을 수 없습니다/일치하지 않기 때문입니다.

나는 분명히 뭔가 잘못하고있는 것을 고려하고있다. 1) 포스트 백 기능은 짐승이 강요 당하지 않고 렌더링하지 않는다. 2) 짐승이 강제로 들어가도, 포스트 백이 적절한 설정을 찾을 수 없다. 여기에 코드 조각입니다 :

클래스 정의

[ParseChildren(true)] 
[PersistChildren(true)] 
[ToolboxData("<{0}:Accordion runat=server></{0}:Accordion>")] 
public class Accordion : DataBoundControl, IPostBackEventHandler 

이벤트

public event JQUI_Event ItemClick; 

클릭 처리기, RaisePostBackEvent, 그리고

public void RaisePostBackEvent(string eventArgument) 
    { 
     ItemClick(null, null); 
    } 

    protected override void OnLoad(EventArgs e) 
    { 
     Page.ClientScript.GetPostBackEventReference(this, string.Empty); 
     base.OnLoad(e); 
    } 

    protected virtual void OnClick(EventArgs e) 
    { 
     if (ItemClick != null) 
     { 
      ItemClick(null, null); 
     } 
    } 

마지막으로 코드를 __doPostBack를 추가는, OnLoad 다시 게시를 생성합니다 :

 if (ItemClick != null) 
     { 
      outPut += "<script> $(function() { $('#" + ClientID + "').find('div').on('click', function() { __doPostBack('" + UniqueID + "', '') }); }); </script>"; 
     } 
     writer.Write(outPut); 

더 많은 코드가 필요한 경우 알려주십시오. 저는 긴 페이지의 코드를 던지기 만하고 사람들에게 알아 내라고 말하고 싶지 않았습니다.

편집 :

좋아, 전화를받을 수있는 RaisePostBackEvent (문자열 eventArgument)를 얻었다. 그러나, 내가 가지고있는 문제는 페이지가 여전히 다시로드하기로 결정한다는 것입니다. 올바른 컨트롤에서 올바른 함수를 호출하는지 테스트했습니다 (포스트 백이 아닌). 이것을 전체 포스트 백이 아닌 부분 포스트 백으로 제한하는 방법이 있습니까?

답변

1

See the GetPostBackEventReference documentation 이는 __doPostBack 메서드 호출을 포함하는 문자열을 반환한다는 것을 보여줍니다. 컨트롤에 대한 등록 방법이 아닙니다. 그런 다음이 문자열을 컨트롤로 렌더링합니다. __doPostBack은 사용자 지정 컨트롤을 사용할 때 자동 출력이 아닙니다.

+0

고마워요! 나는 사건의 연속을 깨달았을 때 그것을 잡았다. 그러나 모든 코드가 실행될 때 왜 내 페이지를 다시로드하는지 궁금합니다. 요소가 업데이트되지 않았기 때문입니다 (구현시 프론트 엔드에서 아무 것도 할 필요가없는 경우 일 수 있습니다). –

+0

좋아요, "코드가 끝까지 실행됩니다."라는 말에 약간 혼란 스럽습니다. 그걸 좀 더 자세히 설명해 줄 수 있니? –

+0

네, 문제 없습니다. 내 말은 RaisePostBackEvent가 올바른 인수로 트리거되고 거기에서 이벤트 핸들러를 호출한다는 것입니다. 모든 코드가 실행 된 후 페이지가 다시로드됩니다. 나는 이것에 의해 조금 난처한 상황이다. 나는 그것이 부분적인 것보다는 전체적인 포스트 백을 실행한다고 믿는다. –