2009-09-22 3 views
0

javascript (jQuery)를 사용하여 ASP : UpdatePanel을 업데이트하는 데 문제가 있습니다. 여기 내가 가진거야.ASP.NET : jQuery를 사용하여 UpdatePanel을 수동으로 업데이트

__doPostBack 트릭을 위해 업데이트 패널의 ClientID를 가져올 수 없기 때문에 숨겨진 버튼 트릭을 사용하고 있습니다. btnUpdate로 눌렀을 때 rptrEnquiry이 리바운드 (a의 GridView RowCommand 단위) btnUpdate로 처리 숨김에서

<asp:UpdatePanel runat="server" ID="pnlUpdate"> 

<Triggers> 
<asp:AsyncPostBackTrigger ControlID="btnUpdate" /> 
</Triggers> 

<ContentTemplate> 

<asp:UpdateProgress runat="server" AssociatedUpdatePanelID="pnlUpdate" DynamicLayout="false" DisplayAfter="100"> 
<ProgressTemplate> 
<img alt="Laddar..." src="img/loader.gif" width="16" height="11"/> 
</ProgressTemplate> 
</asp:UpdateProgress> 

<div style="display:none;"> 
<asp:Button runat="server" ID="btnUpdate" CommandName="Refresh" CommandArgument='<%# Eval("Id") %>'/> 
</div> 

<asp:Repeater runat="server" Id="rptrEnquiry"> 
... 
</asp:Repeater> 


<%= DateTime.Now.ToString() %> 

<a href="javascript:jQuery('#<%= btnUpdate.ClientID %>').trigger('click')&&undefined;">Fire!</a> 

</ContentTemplate> 

</asp:UpdatePanel> 

. 내가 직접 버튼을 누르면 (숨겨지지하면서)

는 모든. updateprogess가 표시되고 날짜가 업데이트 리피터 업데이트 (완벽

작동하지만 화재 링크를 클릭하고 자바 스크립트를 통해 버튼을 실행할 경우에만 날짜입니다 업데이트했지만 updateprogress는 표시되지 않고 리피터가 리바운드되지 않습니다. 리바운드 코드가 실행되지만 리펙트 코드가 업데이트되지 않은 것을 볼 수 있습니다.

답변

6

좋아, 그래서 전적으로 모든 것을 재건하여 내 문제를 해결할 수있었습니다.

나는 updatepanel을 자신의 컨트롤에 포함 시켰을 때 updatepanel 부분을 참조 할 수없는 등의 문제가 대부분 해결되었다. pnlUpdate.

http://encosia.com/2007/10/24/are-you-making-these-3-common-aspnet-ajax-mistakes/은 매우 유용했습니다.

업데이트 패널의 업데이트는 PreRender에서 제어됩니다. __EVENTTARGET을 사용하여 관심있는 패널 만 업데이트됩니다. 나는이 방법을 시도했지만 내가 한

<a href="javascript:__doPostBack('<%= pnlUpdate.ClientID %>','toggle');"> 
<img runat="server" ID="imgToggle" src="~/img/grid_plus.gif" title="Expandera" alt="" width="14" height="14"/> 
</a> 
3

Easily refresh an UpdatePanel, using JavaScript).

there’s an easy method for triggering a postback targeted at the UpdatePanel: __doPostBack().

As long as the event target of a __doPostBack() call is an async trigger of an UpdatePanel, the ASP.NET AJAX framework will intercept the postback and fire a partial postback instead.

<a href="#" onclick="__doPostBack('<%= pnlUpdate.ClientID %>', '');"/> 
+0

:

protected void pnlUpdate_PreRender(object sender, EventArgs args) { if (Request["__EVENTTARGET"] == pnlUpdate.ClientID) { PreBind(); switch(Request["__EVENTARGUMENT"]) { case "toggle": Toggle(); break; case "purchase": Purchase(); break; case "update": /* nop */ break; } Bind(); } } 

적절한 된 ClientID를 위해 __EVENTTARGET를 얻으려면 내가 자바 스크립트를 사용하여 패널 업데이트 화재에 필요 (버튼을 사용하는 경우는 빈 문자열입니다) gridview에있는 updatepanel 가지고 있고이 날 "컴파일 오류 : pnlUpdate 현재 컨텍스트에서"클라이언트 ID를 얻으려고 때 –

+0

그것은 좀 이상한 updatepanel 유일한 컨트롤입니다 내가 할 수있는 gridview ' 현재 상황에서 찾을 수 없습니까? –

+0

__doPostBack() 앵커 태그는 pnlUpdate를 볼 수 있도록 UpdatePanel과 동일한 GridView 템플릿 안에 배치해야합니다. – jrummell

관련 문제