2011-03-17 5 views
0

웹 사용자 컨트롤 내에 ModalPopupExtender를 생성하고 있습니다. 모델 팝업으로 표시되는 패널에서 확인 버튼을 클릭하면 버튼의 이벤트 핸들러가 실행되지 않습니다. 웹 사용자 정의 컨트롤을 사용하지 않는 경우이 프로 브런이 발생하지 않습니다. 다음은 사용자 컨트롤 (.ascx) 파일 코드입니다. PopupExtender가 사용자 정의 컨트롤 안에있을 때의 포스트 백 문제

<script type="text/javascript" language="javascript"> 
    function OkClicked(sender, e) { 
      __doPostBack('Button1', e); 
     } 
</script> 

<asp:Button ID="Button2" runat="server" Text="Show" /> 
<asp:Panel ID="Panel1" runat="server"> 
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
    <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /> 
</asp:Panel> 
<asp:ModalPopupExtender ID="ModalPopupExtender1" runat="server" 
    DropShadow="True" OkControlID="Button1" PopupControlID="Panel1" 
    TargetControlID="Button2" onokscript="OkClicked()"> 
</asp:ModalPopupExtender>   
<p> 
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 
</p> 

그리고 'Button1을'의 클릭 이벤트에 대한 이벤트 Handeler

는 컨트롤의 이름으로 'Button1을'넣으면 안됩니다 자바 스크립트에서

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Label1.Text = TextBox1.Text; 
} 

답변

0

입니다. 대신, 컨트롤의 PreRender 이벤트에 this.Button1.ClientID로 채 웁니다.

ClientID는 단추 컨트롤의 생성 된 전체 페이지에서 고유 한 식별자로, 서버에서 포스트 백이 트리거 된 컨트롤을 정확히 찾아 낼 수 있도록합니다.

이렇게되지 않으면 한 페이지에 동일한 컨트롤의 인스턴스를 여러 개 배치 할 수 없습니다. 코드에서

: 제안

<script type="text/javascript" language="javascript"> 
function OkClicked(sender, e) { 
     __doPostBack('<%= this.Button1.ClientID %>', e); 
    } 

0

커플 :

  1. 는이 페이지에 검증의 어떤 종류가 있습니까. 그렇다면 확인 버튼을 클릭 할 때 유효성 검사가 실패 할 수 있습니다. 버튼을 클릭하면 ModalPopup Extender가 닫히고 유효성 검사가 실패하면 이벤트가 취소 될 수 있습니다. 이 경우, 속성을 추가하십시오 : CausesValidation = "false"

  2. 다시 작동하지 않으면 속성을 추가하여 다시 게시 할 수 있습니다. 속성이 있음을 알 수 있습니다. -> AutoPostBack = "true" .

@Joachim는 클라이언트 ID를 사용해야합니다 것이 정확하지만 동시에, 나는 당신이 백엔드 코드를 실행하는 자바 스크립트를 호출해야합니다 생각하지 않습니다.

페이지를 다시 게시 할 때 전체 페이지를 앞뒤로 보내지 않고도 AJAX 포스트 백을 수행 할 수 있도록 이것을 UpdatePanel에 넣는 것을 고려해 볼 수 있습니다.

관련 문제