2009-03-16 7 views
4

다른 컨트롤을 래핑하는 UpdatePanel이 포함 된 UserControl이 있습니다. UserControl은 이미 ScriptManager가있는 일부 페이지와 ScriptManager가없는 다른 페이지에서 사용됩니다. 나는 UserControl이 없으면 자동으로 ScriptManager를 가져오고 싶습니다.UserControl의 AJAX ScriptManager

ScriptManager.GetCurrent를 시도하고 null을 반환하는 경우 자체 ScriptManager를 만들고 폼에 삽입하지만이 코드를 실행하기 위해 UserControl의 수명주기에서 충분히 일찍 장소를 찾을 수 없습니다. "ID가있는 컨트롤 'uPnlContentList'에는 페이지에 ScriptManager가 필요합니다. ScriptManager는 필요한 컨트롤 앞에 나타나야합니다." 때마다 페이지를로드하려고합니다. 내 코드를 실행하려고했던 곳은 OnInit, CreateChildControls 및 PageLoad이며 도달하기 전에 사망하기 때문에 절대로 호출되지 않습니다.

어디에서이 수표를 발행해야합니까?

답변

2

나는 다른 방향으로오고 싶지 않지만 마스터 페이지를 사용하고 있습니까? 그렇다면 단일 ScriptManager를 배치하고 완료하는 것으로 생각해 봤습니까?

+0

아니요 마스터 페이지가 없습니다 .... 시작하지 마세요 :) 내 손이 그 결정에 묶여 있습니다. – cjserio

+2

왜 대답입니까? – peroija

11

모든 ASPX 파일을 참조하는 MasterPage에 ScriptManager를 넣으십시오. 그런 다음 ScriptManager로 작업해야하는 사이트의 다른 곳에서는 마스터 페이지에서 ScriptManager를 가져 오는 ScriptManagerProxy를 사용하고 사용자 정의 컨트롤과 코드 뒤에 작업 할 수 있습니다.

이제 ScriptManager.GetCurrent (Page)를 호출하면 스크립트 관리자에 대한 참조가 제공됩니다.

MSDN Info

+1

죄송합니다. 마스터 페이지가 없습니다. 그것은 기존의 시스템이고 우리는 통과하여 모든 기존 페이지를 변경할 수 없습니다 ... 그래서 나는 smartcontroller를 usercontrol에 넣으려고합니다. – cjserio

+0

~/Scripts/myscript.js에 포함될 내용은 무엇입니까? –

0

내가 초기화 이벤트가 작동해야한다고 생각 :

<asp:ScriptManagerProxy> 
    <Scripts> 
    <asp:ScriptReference Path="~/Scripts/myscript.js" /> 
    <Scripts> 
</asp:ScriptManagerProxy> 

여기 링크입니다. 설명 된 기술을 사용하여 (추가하기 전에 ScriptManager.GetCurrent가 null을 반환하는지 확인) ScriptManager를 추가 할 때 폼 안의 첫 번째 컨트롤로 추가해야합니다.

나는 이것을 테스트하지 않았지만 효과가있을 것이라고 생각합니다. 나를 < 형태 후이 라인을 포함하고 근무 무엇

+0

죄송합니다, 내가 말했듯이, Init 이벤트는 이전에 예외가 던져지기 때문에 심지어 히트되지 않습니다 ... – cjserio

0

> 주위에 저를 얻었다

<asp:ScriptManager ID="scriptManager" runat="server"/> 

은 "... 페이지에 스크립트 관리자가 필요합니다. 스크립트 관리자가 필요한 모든 컨트롤에 출석해야합니다. "

0

나는 두 가지를 만들었습니다. 당신의 AutoPostBack이있는 경우 당신은 또한에 포커스를 설정해야 UserControl을에 ScriptManagerCall

userControl.SetFocus() 

하기 전에이 작업을 호출합니다 caling 사이트에

Public Sub SetFocus() 
    txtBox.Focus() 
End Sub 

: 해당 UserControl에

이 서브을 TextChanged 이벤트입니다.

Protected Sub txtBox_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtBox.TextChanged 
    txtBox.Focus() 
    ...... 
End Sub 

희망 사항.