2012-02-15 2 views
2

Asp.net 팀은 페이지 당 하나의 인스턴스 (HttpHandler) 만 존재하도록 스크립트 관리자를 설계 했으므로 ScriptManager.GetCurrent과 같은 메서드를 확장 한 유효한 이유를 찾을 수 없습니다. 페이지. 개발자가 할 수없는 이유는 무엇입니까ScriptManager.GetCurrent 메서드의 이유

if(ScriptManager == null) 
{ 
    throw new Exception("The Below ajax control requires ScriptManager in the page"); 
} 
+0

ScriptManager는 ScriptManager 컨트롤의 ID입니다. 맞습니까? ScriptManager가 MasterPage에있을 때 사용자 정의 컨트롤에서 ID에 액세스 할 수 없습니다. – slfan

+0

@slfan 죄송합니다. 여기에 시나리오를 게시하지 않았습니다. 그것은 어떤 ASP 파일 (usercontrol, masterpage, 자식 페이지, 중첩 된 masterpage). Asp.net 팀 (계속 개선됨)은 페이지에서 ScriptManager 인스턴스를 인식하는 방법을 고안했지만 페이지에있는 요청/응답에 'Current' ScriptManager 클래스를 설정하지 않았습니다 (ID가있을 수 있음). sManager, resourceManager 등)처럼 뭔가를 사용할 수있을 때'User.Identity.Name'을 사용하여 로그인 한 사람의 사용자 이름을 얻을 수 있습니다. 나는 이것이 순전히 재래식이며, 미래를위한 결정이라고 느낀다. – Deeptechtons

답변

2

실제 ScriptManager에 액세스 할 수있는 페이지의 코드 숨김 파일 이외의 다른 위치가있을 수 있다고 생각합니다. GetCurrent() 정적 메소드를 사용하면 코드의 모든 위치 (예 : 클래스 라이브러리)에서 현재 컨텍스트의 ScriptManager에 액세스 할 수 있습니다. GetCurrent의 구현은 다음과 같습니다.

public static ScriptManager GetCurrent(Page page) 
{ 
    if (page == null) 
    { 
     throw new ArgumentNullException("page"); 
    } 
    return page.Items[typeof(ScriptManager)] as ScriptManager; 
} 

따라서 ScriptManager 인스턴스에 액세스하기위한 바로 가기입니다.

ScriptManager가 마스터 페이지에 정의되어 있으면 콘텐츠 페이지 나 사용자 정의 컨트롤에서 코드가 작동하지 않습니다.

+0

'요청과 응답'이 존재하는'HttpContext.Current' 권리는 그 뒤에있는 코드보다 다른 곳>을 의미 하는가? (스크립트 관리자를 의미 함) – Deeptechtons

+0

사실이지만 바로 가기입니다. 나는 GetCurrent의 구현을 추가했다. – slfan