2011-03-23 3 views
16

기본적으로 내 CodeVhind의 메소드를 기반으로 자바 스크립트 배열을 생성하는 리터럴이 기본적으로 UpdatePanel에 있습니다.UpdatePanel 포스트 백 문제 이후에 자바 스크립트 함수 호출

페이지로드시 내 콘텐츠를로드 할 때 문제가 없습니다. 하지만 내 updatepanel 내에서 내 자바 스크립트 배열 리터럴을 업데이 트하는 검색을 수행하면 리터럴은 자바 스크립트가 이미 해고 후 다시 게시에 업데이 트를 발견.

<script type="text\javascript"> 
function BindMyFunction(itemList) 
{ 
    //Do something 
} 
</script> 

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
<ContentTemplate> 
<!-- Literal containing generated JS array --> 
    <asp:Literal ID="ProfileJavscriptOutput" runat="server"></asp:Literal> 
    <ul id="person-search"> 
    <li><asp:TextBox ID="TxtFirstname" runat="server" Text=""></asp:TextBox></li> 
    <!-- Update Literal onClick --> 
     <li><asp:ImageButton CssClass="searchbtn" ID="ImageButton1" runat="server" OnClick="ImageButton1_Click" /></li> 
    </ul>  
    <!-- Some jCarousel rendered --> 
</asp:UpdatePanel> 

나는 다음과 같은 게시물에서 찾고 있었어요 : 여기

내가 가지고있는 기본적인 예입니다

ASP.NET - UpdatePanel and JavaScript

call javascript after updatepanel postback

하지만 그럴 수 없어 내 코드에 올바르게 적용되는 것 같습니다.

UpdatePanel을 사용하지 않아도 제대로 작동합니다. 그러나 검색을 수행 할 때 페이지 위치가 이동하지 않는 것이 요구 사항입니다.

+0

전에 어떤 같은 코드 모양은 후 어떠한가입니까? –

+0

전체 페이지가로드 될 때 JavaScript가 호출되는 방식은 무엇입니까? –

+11

어머니가 업데이트 패널이 나쁘다고 말하지 않았습니까? –

답변

25

당신은 Page_Load 이벤트에 다음 코드를 추가 할 수 있습니다

ScriptManager.RegisterStartupScript(Me.rptGridAlbum, rptGridAlbum.GetType, "scriptname", "somejavascript", True) 

이것은 AJAX 콜백 후 페이지에 자바 스크립트를 실행됩니다.

MSDN

+0

그래, 그게 효과가 ScriptManager.RegisterStartupScript 초기 데이터를 얻기에 전화를 누른 다음 자바 스크립트를 업데이 트 내 검색을 수행 할 때 전화. – R100

+19

너무 나쁜 인수의 더 나은 설명이 그렇지 않으면이 대답은 아마도 더 많은 방법을 것입니다 주어지지 않았다. 위로 투표 –

+2

전체 자바 스크립트 파일을 포함하려는 경우 네 번째 매개 변수는 파일 경로가 아니라 실제 자바 스크립트 내용. 당신은'File.ReadAllText (Server.MapPath ("~/Virtual/Path/To/File.js")와 같은 것을 할 수 있습니다.)' – TJB

0

필요할 때마다 자바 스크립트 배열을 페이지에 반환하고 자바 스크립트 메서드로 해당 웹 서비스에 대한 호출을 래핑하는 간단한 웹 서비스 메서드를 만들 수 있습니다. 브라우저 측 메모리에서 배열을 새로 고치는 javascript 메서드를 호출하면 js 배열 리터럴이 UpdatePanel 포스트 백에서 성공적으로 파싱 될 것으로 기대하는 것보다 효과적입니다.

+0

UpdatePanel 포스트 백에서 JS 배열을 업데이트하는 것이 [ScriptManager.RegisterArrayDeclaration'] (https://msdn.microsoft.com/en-us/library/bb292362%28v=vs.110%29.aspx)를 사용하면 더 잘 수행 될 수 있습니다. – Abel

0
var prm = Sys.WebForms.PageRequestManager.getInstance(); 
if (prm != null) { 
    prm.add_endRequest(function (sender, e) { 
     if (sender._postBackSettings.panelsToUpdate != null) { 
      DisplayCurrentTime(); // here your javascript function 
     } 
    }); 
}; 
관련 문제