2009-12-03 1 views
0

동안 점화되지 않음 - 자사의 HTML은 간단하다 :시작 스크립트 내가 시작 스크립트를 발생 MyUpdateControl라는 이름의 사용자 정의 컨트롤,이 부분 새로 고침

<div id="updatableArea"></div> 

시작 스크립트는 사용자 정의 컨트롤의의 OnLoad()에 추가됩니다

<asp:UpdatePanel ID="myUpdatePanel" runat="server" > 
    <ContentTemplate> 
     <UC1:MyUpdateControl ID="myUpdaterControl" runat="server" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 
:
string doUpdateScript = String.Format(
    "DoUpdate('{0}')", 
    someValue); 
this.Parent.Page.ClientScript.RegisterStartupScript(typeof(Page), "DoUpdateScript", doUpdateScript); 

MyUpdateControl 사용자 제어

때로는 다른 사용자 컨트롤의 업데이트 패널에 포함되어

이러한 경우 스크립트는 페이지가 처음로드 될 때만 시작됩니다. 비동기 포스트 백 중에는 절대 실행되지 않습니다. 비동기 포스트 백 중에 호출되는 것을 어떻게 보장 할 수 있습니까?

+0

updatepanel에 대해 UpdateMode = "조건부"를 시도해보십시오. –

답변

1

ClientScript.RegisterStartupScript 대신 UpdatePanel 내에 스크립트를 등록 할 때 ScriptManager.RegisterStartupScript을 사용해야합니다. 클라이언트 스크립트 블록을 첫 번째 매개 변수로 등록하는 컨트롤을 예상하는이 메서드의 오버로드가 있습니다.

public class MyUpdateControl : Control 
{ 
    public MyUpdateControl() 
    {   
    } 

    protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 
     //.. 
     string doUpdateScript = String.Format(
      "DoUpdate('{0}')", someValue); 
     ScriptManager.RegisterStartupScript(this, GetType(), 
      "ServerControlScript", script, true); 
     //.. 
    } 
} 

위 예제는 사용자 정의 컨트롤을 사용합니다. 사용자 컨트롤을 사용하고 있다는 것을 알고 있습니다. 두 가지 구현은 매우 비슷하지만 아래에 완전성을위한 예제가 포함되어 있습니다.

public partial class MyUpdateControl : System.Web.UI.UserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    {  
     //.. 
     string doUpdateScript = String.Format(
      "DoUpdate('{0}')", someValue); 
     ScriptManager.RegisterStartupScript(this, GetType(), 
      "ServerControlScript", script, true); 
     //.. 
    } 
} 
관련 문제