2012-03-22 1 views
1

플랫폼로드 된 경우에 ScriptManager는 UpdatePanel에 의해 찾을 수 없습니다 사용자 정의 CDN 처리 및 페이지 및 기타 사용자 정의 것들에 삽입 스크립트에 대한의 base class에서 4.0베이스 페이지에

내가 스크립트 관리자를로드 asp.net을.

문제는 UpdatePanel을 삽입 할 때 updatePanel이 일찍 검색하므로 스크립트 관리자를 찾지 못하는 것입니다.

basePage에서 ScriptManager를 제거하지 않는 해결책이 있습니까?

이 클래스는이 사이트의 특정베이스 페이지

public abstract class SiteBasePage:OurFrameworkBasePage 
{ 
    //some custom methods and utility for a specific site 
} 

<html> 
<head runat="server"><title></title></head> 
<body> 
    <form id="form1" runat="server"> 
     <div> 
     <asp:UpdatePanel runat="server"> 
      <ContentTemplate> 
       <asp:Literal runat="server" ID="ltr"></asp:Literal> 
       <asp:Button runat="server" OnClick="btnOkClick" ID="btnOk" Text="ok"/> 
      </ContentTemplate> 
     </asp:UpdatePanel> 
     </div> 
    </form> 
</body> 
</html> 

답변

2

는 희망이 당신이 당신의 프레임 워크를 통해 제어 할 수 있습니다 Default.aspx 페이지 우리의 사용자 정의 유틸리티 DLL

public abstract class OurFrameworkBasePage:Page 
{ 
    protected override void OnInit(EventArgs e) 
    { 
     CurrentScriptManager = BuildScriptManager(); 
     Form.Controls.AddAt(0, CurrentScriptManager); 
     base.OnInit(e); 
    } 

    private ScriptManager BuildScriptManager() 
    { 
     return new ScriptManager 
     { 
      //some scriptmanager settings 
     }; 
    } 

    protected ScriptManager CurrentScriptManager { get; set; } 
} 

에서입니다 문제가 해결 될 것이므로 수업을 취소하십시오 :

protected override ControlCollection CreateControlCollection() 
{ 
    CurrentScriptManager = BuildScriptManager(); 
    ControlCollection pageControls = base.CreateControlCollection(); 
    pageControls.AddAt(0, CurrentScriptManager); 
    return pageControls; 
} 
protected override void OnInit(EventArgs e) 
{ 
    Form.Controls.AddAt(0, CurrentScriptManager); 
    base.OnInit(e); 
} 

두 위치에 있어야합니다. 먼저 CreateControlCollection에서 다른 모든 컨트롤과 함께 만들어집니다. 둘째, OnInit에서는 ScriptManager가 runat = "server"형식의 폼에 있어야하기 때문에

+0

그레이트 참조하면, 그렇지 않으면 scriptmanger 스크립트 프로그래밍 삽입됩니다 aspx 페이지에 스크립트 관리자 태그를 넣을 필요가 있음을 의미! 나는 CreateControlCollection에 대해 생각하지 않았다. 그동안 나는 다른 해결책을 발견했고, 나는 그것을 참고 용으로 게시 할 것이다. – giammin

1

GuthMD의 솔루션은 훌륭한 솔루션입니다.

다른 요구 사항을 달성하는 다른 솔루션을 찾았으며 참조 용으로 작성했습니다.

내 솔루션은 updatePanel와 포스트 백을 처리하려면

protected override void OnInit(EventArgs e) 
    { 
     CurrentScriptManager = BuildScriptManager(); 
     base.OnInit(e); 
    } 

    private ScriptManager BuildScriptManager() 
    { 
     ScriptManager rtn; 
     var script = Items[typeof (ScriptManager)]; 
     if (script == null) 
     { 
      rtn = new ScriptManager 
         { 
          EnablePartialRendering = false 
         }; 
      Form.Controls.AddAt(0, rtn); 
     } 
     else 
     { 
      rtn = (ScriptManager) script; 
     } 

     rtn.EnablePageMethods = false; 
     rtn.AjaxFrameworkMode = AjaxFrameworkMode.Disabled; 
     rtn.EnableCdn = true; 
     return rtn; 
    }