2013-06-04 3 views
3

중계기 내부의 항목에 대한 트리거를 만드는 데 문제가 있습니다. 그러나중계기 내에서 여러 개의 업데이트 패널 트리거

<Triggers> 
    <asp:PostBackTrigger ControlID="button" /> 
</Triggers> 

, 나는 LinkButton 초 동안이 작업을 수행 할 수 있습니다 : 나는 업데이트 패널 내에서 포스트 백을 트리거 할 Linkbutton 제어하고 싶습니다, 나는 잘 작동하는 Button 제어를위한 마크 업에 정의 된 트리거가 그들은 동적으로 생성 된 것 같은, 유일한 해결책은과 같이 데이터 내 중계기에 바인딩 이벤트를 각 버튼에 대한 트리거를 추가하는 것입니다 :

A control with ID 'ctl00$content$repeater$ctl01$linkButton' could not be found for the trigger in UpdatePanel 'updatepanel'.

:

//Inside repeater itemdatabound... 
var trigger = new PostBackTrigger(); 
trigger.ControlID = linkButton.UniqueID; 
updatepanel.Triggers.Add(trigger); 

이 코드를 실행 내가 오류가 발생

LinkButtons 각각에 대해 트리거를 어떻게 동적으로 추가 할 수 있습니까?

답변

7

해결했습니다. 리피터 컨트롤이 업데이트 패널에 직접 표시되지 않기 때문에 OP에서 작동하지 않는 이유가 있다고 가정합니다. 내가 중계기의 외부에서 이동이 의심

그것을 해결 한 것 또는 FindControl("linkbutton") 전화에 팅겨을하면이 방법을 사용하면 내가 각각 두 개의 링크 버튼 객체를 생성해야한다는 것을 의미 할 것입니다, 컨트롤의 중계기로 드릴 다운 레벨로 설정하는 것이 바람직하지 않습니다.

그러나, 나는 청소기 솔루션은 스크립트 관리자를 사용하여 포스트 백 컨트롤로 LinkButton 컨트롤을 등록하는 생각 : 리피터 OnItemDataBound 이벤트 내에서

//Create triggers for each 'remove' button 
ScriptManager scriptManager = ScriptManager.GetCurrent(Page); 
if (scriptManager != null) 
{ 
    scriptManager .RegisterPostBackControl(linkbutton); 
} 

이 그것을 해결했다.

0

고유 ID 속성 대신 clientID를 사용할 수 있습니다.

+0

, 그것은 당신이 관심이 경우 자신을 불행하게도 – DGibbs

+0

이 응답 한 동일한 결과를 생성합니다. 그래도 모두 고마워. – DGibbs

0

깔끔한 해결책은 다음과 같습니다 이미이 함께 시도했습니다

protected void MyRepeater_OnItemCreated(object sender, RepeaterItemEventArgs e) 
    { 
     //Inside ItemCreatedEvent 
     ScriptManager scriptMan = ScriptManager.GetCurrent(this); 
     LinkButton btn = e.Item.FindControl("btnSubmit") as LinkButton; 
     if (btn != null) 
     { 
      btn.Click += btnSubmit_Click; 
      scriptMan.RegisterAsyncPostBackControl(btn); 
     } 
    } 

This is the source thread

관련 문제